home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / editshadow.s < prev    next >
Text File  |  1997-11-28  |  46KB  |  3,155 lines

  1.  
  2. * the 'Hello World' program in 68000 Assembler
  3. * the C version can be found in the Intuition manual
  4.  
  5. * this source code (C) HiSoft 1992 All Rights Reserved
  6.  
  7. * for Devpac Amiga Version 2 the following symbols were changed
  8. * to avoid clashes with the new include files:
  9. * Screen->MyScreen, NewScreen->MyNewScreen
  10. * Window->MyWindow, NewWindow->MyNewWindow
  11.  
  12.     opt    c+,d+
  13.  
  14.     include    workbench:utilities/devpac/system            use pre-assembled header
  15.     include    exec/exec_lib.i
  16.     include    intuition/intuition.i
  17.     include    intuition/intuition_lib.i
  18.     include    graphics/graphics_lib.i
  19.     include    graphics/text.i
  20.  
  21. INTUITION_REV    equ    31        v1.1
  22. GRAPHICS_REV    equ    31        v1.1
  23.  
  24. * Open the intuition library
  25.  
  26.     moveq    #100,d4            default error return code
  27.  
  28.     moveq    #INTUITION_REV,d0    version
  29.     lea    int_name(pc),a1
  30.     CALLEXEC OpenLibrary
  31.     tst.l    d0
  32.     beq    exit_false        if failed then quit
  33.     move.l    d0,_IntuitionBase    else save the pointer
  34.  
  35.     moveq    #GRAPHICS_REV,d0
  36.     lea    graf_name(pc),a1
  37.     CALLEXEC OpenLibrary
  38.     tst.l    d0
  39. ;    beq    exit_closeint        if failed then close Int, exit
  40.     move.l    d0,_GfxBase
  41.     lea    MyNewScreen(pc),a0
  42.     CALLINT    OpenScreen        open a screen
  43.     tst.l    d0
  44. ;    beq    exit_closeall        if failed the close both, exit
  45.     move.l    d0,MyScreen
  46.  
  47.     move.l MyScreen,a0
  48.     lea sc_BitMap(a0),a0
  49.     lea bm_Planes(a0),a0
  50.     move.l #RAWSCRN,(a0)
  51.     move.l #RAWSCRN+10240,4(a0)
  52.     move.l #RAWSCRN+10240*2,8(a0)
  53.     move.l #RAWSCRN+10240*3,12(a0)
  54.     move.l #RAWSCRN+10240*4,16(a0)
  55.     move.l #RAWSCRN+10240*5,20(a0)
  56.     move.l #RAWSCRN+10240*6,24(a0)
  57.     move.l #RAWSCRN+10240*7,28(a0)
  58.  
  59. * now initialise a NewWindow structure. This is normally easier to
  60. * do with dc.w/dc.l statement etc, but for comparison with the C
  61. * version we do it like this
  62.     lea    MyNewWindow(pc),a0    good place to start
  63.     move.w    #20,nw_LeftEdge(a0)
  64.     move.w    #20,nw_TopEdge(a0)
  65.     move.w    #300,nw_Width(a0)
  66.     move.w    #100,nw_Height(a0)
  67.     move.b    #0,nw_DetailPen(a0)
  68.     move.b    #1,nw_BlockPen(a0)
  69.     move.l    #window_title,nw_Title(a0)
  70. _temp    set    WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
  71.     move.l    #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
  72.     move.l    #CLOSEWINDOW,nw_IDCMPFlags(a0)
  73.     move.w    #CUSTOMSCREEN,nw_Type(a0)
  74.     clr.l    nw_FirstGadget(a0)
  75.     clr.l    nw_CheckMark(a0)
  76.     move.l    MyScreen(pc),nw_Screen(a0)
  77.     clr.l    nw_BitMap(a0)
  78.     move.w    #100,nw_MinWidth(a0)
  79.     move.w    #25,nw_MinHeight(a0)
  80.     move.w    #640,nw_MaxWidth(a0)
  81.     move.w    #200,nw_MaxHeight(a0)
  82.  
  83. * thats it set up, now open the window (a0=NewWindow already)
  84. ;    CALLINT    OpenWindow
  85. ;    tst.l    d0
  86. ;    beq    exit_closescr            if failed
  87. ;    move.l    d0,MyWindow            save it
  88. ;
  89. ;    move.l    d0,a1                window
  90. ;    move.l    wd_RPort(a1),a1            rastport
  91. ;    moveq    #20,d0                X
  92. ;    moveq    #20,d1                Y
  93. ;    CALLGRAF Move                move the cursor
  94. ;
  95. ;    move.l    MyWindow(pc),a0
  96. ;    move.l    wd_RPort(a0),a1            rastport
  97. ;    lea    hello_message(pc),a0
  98. ;    moveq    #11,d0
  99. ;    CALLGRAF Text                print something
  100. ;
  101. ;    move.l    MyWindow(pc),a0
  102. ;    move.l    wd_UserPort(a0),a0
  103. ;    move.b    MP_SIGBIT(a0),d1        (misprint in manual)
  104. ;    moveq    #0,d0
  105. ;    bset    d1,d0                do a shift
  106. ;    CALLEXEC Wait
  107.  
  108. ;    moveq    #0,d4                return code
  109.  
  110. * various exit routines that do tidying up, given a return code in d4
  111.  
  112. ;    move.l    MyWindow(pc),a0
  113. ;    CALLINT CloseWindow
  114.  
  115. ;exit_closescr
  116. ;    move.l    MyScreen(pc),a0
  117. ;    CALLINT CloseScreen
  118.  
  119. ;exit_closeall
  120. ;    move.l    _GfxBase(pc),a1
  121. ;    CALLEXEC CloseLibrary
  122.  
  123. ;exit_closeint
  124. ;    move.l    _IntuitionBase(pc),a1
  125. ;    CALLEXEC CloseLibrary
  126.  
  127. ;done:
  128. ;    bra done
  129.  
  130.  move.l #PALETTEBIT,a0
  131.  move.l #COPIEDPAL+4,a1
  132.  move.w #255,d0
  133.  
  134. copydown:
  135.  move.b 1(a0),(a1)
  136.  move.b 3(a0),4(a1)
  137.  move.b 5(a0),8(a1)
  138.  add.w #6,a0
  139.  add.w #12,a1
  140.  dbra d0,copydown
  141.  
  142.  move.w #256,COPIEDPAL
  143.  move.w #0,COPIEDPAL+2
  144. LOOKFORME:
  145.  move.l MyScreen,a0
  146.  lea sc_ViewPort(a0),a0
  147.  move.l #COPIEDPAL,a1
  148.  move.l _GfxBase,a6
  149.  jsr -$372(a6)
  150.  
  151.  move.l MyScreen,a4
  152.  move.w sc_MouseX(a4),d0
  153.  move.w sc_MouseY(a4),d1
  154.  move.w d0,OLDXM
  155.  move.w d1,OLDYM
  156.     
  157.  
  158.  
  159.     
  160. loop:
  161.  
  162.  move.l #POLYGONDATA,a3
  163.  move.w (a3)+,SORTIT
  164.  move.l a3,START_OF_OBJECT
  165.     
  166.  move.w (a3)+,num_points
  167.  move.w (a3)+,d6
  168.  move.w d6,num_frames
  169.  move.l a3,POINTER_TO_POINTERS
  170.  lea (a3,d6.w*4),a3
  171.  move.l a3,LinesPtr
  172.  moveq #0,d5
  173.  moveq #0,d2
  174.  
  175.  move.l POINTER_TO_POINTERS,a4
  176.  move.w (a4,d5.w*4),d2
  177.  add.l START_OF_OBJECT,d2
  178.  move.l d2,PtsPtr
  179.  move.w 2(a4,d5.w*4),d5
  180.  add.l START_OF_OBJECT,d5
  181.  move.l d5,PolyAngPtr
  182.  move.l d2,a3
  183.  move.w num_points,d5
  184.  
  185.  move.l (a3)+,OBJONOFF
  186.  
  187.  move.l a3,PointAngPtr
  188.  add.w d5,d5
  189.  move.w d5,d2
  190.  add.w d5,d5
  191.  add.w d5,d2
  192.  add.w d2,a3
  193.  move.l a3,PtsPtr
  194.  
  195.  move.l MyScreen,a4
  196.  move.w sc_MouseX(a4),d0
  197.  move.w sc_MouseY(a4),d1
  198.  
  199.  sub.w OLDXM,d0
  200.  sub.w OLDYM,d1
  201.  add.w d0,OLDXM
  202.  add.w d1,OLDYM
  203.  
  204.  btst #6,$bfe001
  205.  beq.s .SHIFTABOUT
  206.  
  207.  muls #8190,d0
  208.  divs #160,d0
  209.  add.w d0,YANG
  210.  and.w #8190,YANG
  211.  muls #8190,d1
  212.  divs #160,d1
  213.  and.w #8190,d1
  214.  add.w d1,XANG
  215.  and.w #8190,XANG
  216.  
  217. ; add.w #40,AANG
  218. ; add.w #70,BANG
  219. ; and.w #8191,AANG
  220. ; and.w #8191,BANG
  221.  
  222. ; add.w #60,CANG
  223. ; add.w #90,DANG
  224. ; and.w #8191,CANG
  225. ; and.w #8191,DANG
  226.  
  227.  
  228.  bra .ROTABOUT
  229. .SHIFTABOUT
  230.  
  231.   muls #8190,d0
  232.  divs #160,d0
  233.  add.w d0,BANG
  234.  and.w #8190,BANG
  235.  muls #8190,d1
  236.  divs #160,d1
  237.  and.w #8190,d1
  238.  add.w d1,AANG
  239.  and.w #8190,AANG
  240.  
  241.  
  242. .ROTABOUT
  243.  
  244.  move.w AANG,d1
  245.  move.w BANG,d3
  246. ; cmp.w #2,d6
  247. ; bne.s .notsecrot
  248. ; move.w CANG,d1
  249. ; move.w DANG,d3
  250. ;.notsecrot
  251.  move.l #SINETABLE,a1
  252.  move.w (a1,d1.w),XSIN    ;xsin
  253.  move.w (a1,d3.w),YSIN    ;ysin
  254.  
  255.  add.w #2048,a1
  256.  move.w (a1,d1.w),XCOS    ;xcos
  257.  move.w (a1,d3.w),YCOS    ;ycos
  258.  
  259.  move.w XANG,d1
  260.  move.w YANG,d3
  261. ; cmp.w #2,d6
  262. ; bne.s .notsecrot
  263. ; move.w CANG,d1
  264. ; move.w DANG,d3
  265. ;.notsecrot
  266.  move.l #SINETABLE,a1
  267.  move.w (a1,d1.w),XSIN2    ;xsin
  268.  move.w (a1,d3.w),YSIN2    ;ysin
  269.  
  270.  add.w #2048,a1
  271.  move.w (a1,d1.w),XCOS2    ;xcos
  272.  move.w (a1,d3.w),YCOS2    ;ycos
  273.  
  274.  
  275. ************************************************
  276. ************************************************
  277. ************************************************
  278. ************************************************
  279. ************************************************
  280. ************************************************
  281. ************************************************
  282. ************************************************
  283. ************************************************
  284. ************************************************
  285. ************************************************
  286. ************************************************
  287. ************************************************
  288. ************************************************
  289.  
  290. *SHADOW BUFFER CALCULATION
  291.  
  292.  
  293. ; First, calculate the normal brightnesses
  294. ; for points. NB: -1,-1,-1 = this point not used
  295. ; in gouraud shading.
  296.  
  297.  move.l #NORMBRIGHTS,a2
  298.  move.l PointAngPtr,a0
  299.  move.w num_points,d7
  300.  
  301.  move.l #NORMVECTS,a5
  302.  
  303.  subq #1,d7
  304.  
  305. CALCNORMBRIGHTS:
  306.  
  307.  move.w (a0)+,d0
  308.  move.w (a0)+,d1
  309.  move.w (a0)+,d2
  310.  
  311.  move.w #0,d6
  312.  
  313.  cmp.w #-1,d0
  314.  bne.s .notnot
  315.  cmp.w #-1,d1
  316.  bne.s .notnot
  317.  cmp.w #-1,d2
  318.  bne.s .notnot
  319.  
  320.  move.w #-1,x1
  321.  move.w #-1,y1
  322.  move.w #-1,z1
  323.  bra .dontbother
  324.  
  325. .notnot:
  326.  neg.w d1
  327.  
  328.  move.w d0,d3
  329.  move.w d2,d5
  330.  
  331.  muls YCOS,d0
  332.  muls YSIN,d2
  333.  sub.l d2,d0
  334.  add.l d0,d0
  335.  swap d0
  336. ; asr.l #6,d0    ; new x*512
  337.  
  338.  muls YSIN,d3
  339.  muls YCOS,d5
  340.  add.l d5,d3
  341.  add.l d3,d3
  342.  swap d3
  343.  move.w d3,d2    ; new z
  344.  
  345.  move.w d1,d4
  346.  move.w d2,d5
  347.  muls XCOS,d1
  348.  muls XSIN,d2
  349.  sub.l d2,d1
  350.  add.l d1,d1
  351.  swap d1
  352.  
  353.  muls XSIN,d4
  354.  muls XCOS,d5
  355.  add.l d5,d4
  356.  add.l d4,d4
  357.  swap d4
  358.  move.w d4,d2    ; new z
  359.  
  360.  
  361.  move.w d0,d3
  362.  move.w d2,d5
  363.  
  364.  muls YCOS2,d0
  365.  muls YSIN2,d2
  366.  sub.l d2,d0
  367.  add.l d0,d0
  368.  swap d0
  369.  
  370.  muls YSIN2,d3
  371.  muls YCOS2,d5
  372.  add.l d5,d3    
  373.  add.l d3,d3
  374.  swap d3
  375.  move.w d3,d2    ; new z
  376.  
  377.  move.w d1,d4
  378.  move.w d2,d5
  379.  muls XCOS2,d1
  380.  muls XSIN2,d2
  381.  sub.l d2,d1
  382.  add.l d1,d1
  383.  swap d1
  384.  
  385.  muls XSIN2,d4
  386.  muls XCOS2,d5
  387.  add.l d5,d4
  388.  add.l d4,d4
  389.  swap d4
  390.  
  391.  move.w d0,x1
  392.  move.w d1,y1
  393.  move.w d4,z1
  394.  
  395.  
  396.  move.w d1,d6    ; new y 
  397.  
  398.  asr.w #4,d6
  399.  add.w #20,d6
  400.  
  401.  ble.s .okokok
  402.  
  403.  moveq #0,d6
  404.  
  405. .okokok:
  406.  add.w #$1c,d6
  407.  bge.s .okokokok
  408.  moveq #0,d6
  409. .okokokok:
  410.  
  411.  add.w #32,d6
  412.  
  413. ; cmp.w #28,d6
  414. ; blt.s .okbig
  415. ; move.w #28,d6
  416. ;.okbig
  417.  
  418. .dontbother:
  419.  move.w x1,(a5)+
  420.  move.w y1,(a5)+
  421.  move.w z1,(a5)+
  422.  move.w d6,(a2)+
  423.  
  424.  dbra d7,CALCNORMBRIGHTS
  425.  
  426.  
  427. ; Next, calculate the point coords for
  428. ; the shadow buffer.
  429.  
  430.  move.l #SHADOWPTS,a2
  431.  move.l PtsPtr,a0
  432.  move.w num_points,d7
  433.  subq #1,d7
  434.  
  435. ROTPTLOPSHAD:
  436.  move.w (a0)+,d0
  437.  move.w d0,d3
  438.  move.w (a0)+,d1
  439.  move.w (a0)+,d2
  440.  move.w d2,d5
  441.  
  442.  muls YCOS,d0
  443.  muls YSIN,d2
  444.  sub.l d2,d0
  445.  add.l d0,d0
  446.  swap d0
  447. ; asr.l #6,d0    ; new x*512
  448.  
  449.  muls YSIN,d3
  450.  muls YCOS,d5
  451.  add.l d5,d3
  452.  add.l d3,d3
  453.  swap d3
  454.  move.w d3,d2    ; new z
  455.  
  456.  move.w d1,d4
  457.  move.w d2,d5
  458.  muls XCOS,d1
  459.  muls XSIN,d2
  460.  sub.l d2,d1
  461.  add.l d1,d1
  462.  swap d1
  463.  
  464.  muls XSIN,d4
  465.  muls XCOS,d5
  466.  add.l d5,d4
  467.  add.l d4,d4
  468.  swap d4
  469.  move.w d4,d2    ; new z
  470.   
  471.  move.w d0,d3
  472.  move.w d2,d5
  473.  
  474.  muls YCOS2,d0
  475.  muls YSIN2,d2
  476.  sub.l d2,d0
  477.  asr.l #6,d0    ; new x*512
  478.  
  479.  muls YSIN2,d3
  480.  muls YCOS2,d5
  481.  add.l d5,d3
  482.  add.l d3,d3
  483.  swap d3
  484.  move.w d3,d2    ; new z
  485.  
  486.  move.w d1,d4
  487.  move.w d2,d5
  488.  muls XCOS2,d1
  489.  muls XSIN2,d2
  490.  sub.l d2,d1
  491.  asr.l #6,d1    ; new y*512
  492.  
  493.  muls XSIN2,d4
  494.  muls XCOS2,d5
  495.  add.l d5,d4
  496.  add.l d4,d4
  497.  swap d4
  498.  move.w d4,d2    ; new z
  499.  
  500.  ext.l d2
  501.  
  502.  move.w XOFF,d5
  503.  ext.l d5
  504.  asl.l #8,d5
  505.  add.l d5,d5
  506.  add.l d5,d0
  507.  
  508.  move.l d0,(a2)+
  509.  move.l d1,(a2)+
  510.  move.w d2,(a2)+
  511.  
  512.  dbra d7,ROTPTLOPSHAD
  513.  
  514.  
  515.  
  516. ***************************************
  517. * Calculate viewer position for specularity..
  518.  
  519.  move.w #0,d0
  520.  move.w #0,d1
  521.  move.w #-1024,d2
  522.  
  523. ; move.w d0,d3
  524. ; move.w d2,d5
  525. ;
  526. ; muls YCOS,d0
  527. ; muls YSIN,d2
  528. ; sub.l d2,d0
  529. ; add.l d0,d0
  530. ; swap d0
  531. ; asr.l #6,d0    ; new x*512
  532. ; muls YSIN,d3
  533. ; muls YCOS,d5
  534. ; add.l d5,d3
  535. ; add.l d3,d3
  536. ; swap d3
  537. ; move.w d3,d2    ; new z
  538. ;
  539. ; move.w d1,d4
  540. ; move.w d2,d5
  541. ; muls XCOS,d1
  542. ; muls XSIN,d2
  543. ; sub.l d2,d1
  544. ; add.l d1,d1
  545. ; swap d1
  546. ; muls XSIN,d4
  547. ; muls XCOS,d5
  548. ; add.l d5,d4
  549. ; add.l d4,d4
  550. ; swap d4
  551. ; move.w d4,d2    ; new z
  552.  
  553.  move.w d0,d3
  554.  move.w d2,d5
  555.  
  556.  muls YCOS2,d0
  557.  muls YSIN2,d2
  558.  sub.l d2,d0
  559.  add.l d0,d0
  560.  swap d0
  561.  
  562.  muls YSIN2,d3
  563.  muls YCOS2,d5
  564.  add.l d5,d3    
  565.  add.l d3,d3
  566.  swap d3
  567.  move.w d3,d2    ; new z
  568.  
  569.  move.w d1,d4
  570.  move.w d2,d5
  571.  muls XCOS2,d1
  572.  muls XSIN2,d2
  573.  sub.l d2,d1
  574.  add.l d1,d1
  575.  swap d1
  576. ; asr.l #6,d1    ; new y*512
  577.  
  578.  muls XSIN2,d4
  579.  muls XCOS2,d5
  580.  add.l d5,d4
  581.  add.l d4,d4
  582.  swap d4
  583.  
  584.  move.w d0,x2b
  585.  move.w d1,y2b
  586.  move.w d4,z2b
  587.  
  588. ; Now the specular highlight efforts....
  589.  
  590.  move.l #SPECBRIGHTS,a2
  591.  move.l #NORMVECTS,a1
  592.  
  593.  move.l #SHADOWPTS,a5
  594.  
  595.  move.w num_points,d7
  596.  subq #1,d7
  597.  
  598. CALCSPECBRIGHTS:
  599.  
  600.  move.w (a1)+,x1
  601.  move.w (a1)+,y1
  602.  move.w (a1)+,z1
  603.  
  604.  
  605.  move.w x2b,d0
  606.  move.l (a5)+,d1
  607.  asr.l #8,d1
  608.  asr.l #1,d1
  609.  sub.w d1,d0
  610.  move.w d0,x2
  611.  move.w y2b,d0
  612.  move.l (a5)+,d1
  613.  asr.l #8,d1
  614.  asr.l #1,d1
  615.  sub.w d1,d0
  616.  move.w d0,y2
  617.  move.w z2b,d0
  618.  sub.w (a5)+,d0
  619.  move.w d0,z2
  620.  
  621.  move.w #0,d6
  622.  
  623.  cmp.w #-1,x1
  624.  bne.s .notnot
  625.  cmp.w #-1,y1
  626.  bne.s .notnot
  627.  cmp.w #-1,z1
  628.  beq .dontbother
  629. .notnot: 
  630.  
  631.  
  632.  move.w x2,d2
  633.  muls d2,d2
  634.  move.w y2,d1
  635.  muls d1,d1
  636.  add.l d1,d2
  637.  move.w z2,d1
  638.  muls d1,d1
  639.  add.l d1,d2
  640.  
  641.  jsr CALCSQROOT
  642.  
  643.  move.w d2,l2
  644.  
  645.  move.w y1,d0
  646.  muls z2,d0
  647.  move.w y2,d1
  648.  muls z1,d1
  649.  sub.l d1,d0    ; x4
  650.  
  651. ; move.w z1,d1
  652. ; muls x2,d1
  653. ; move.w z2,d2
  654. ; muls x1,d2
  655. ; sub.l d2,d1    ; y4
  656.  
  657.  move.w x1,d2
  658.  muls y2,d2
  659.  move.w x2,d3
  660.  muls y1,d3
  661.  sub.l d3,d2    ; z4
  662.  
  663.  asr.l #8,d0
  664. ; asr.l #8,d1
  665.  asr.l #8,d2
  666.  asr.l #2,d0
  667. ; asr.l #2,d1
  668.  asr.l #2,d2
  669.  
  670. ; move.w x1,d3
  671. ; muls d1,d3
  672. ; move.w y1,d4
  673. ; muls d0,d4
  674. ; sub.l d4,d3
  675. ; asr.l #8,d3
  676. ; asr.l #1,d3
  677.  
  678. ; add.w z2,d3
  679.  
  680.  move.w z1,d3
  681.  muls d0,d3
  682.  move.w x1,d4
  683.  muls d2,d4
  684.  sub.l d4,d3
  685.  add.l d3,d3
  686.  
  687.  divs l2,d3
  688.  
  689. ; asr.l #8,d3
  690. ; asr.l #1,d3
  691.  
  692.  add.w y2,d3
  693.  
  694.  move.w d3,d6
  695.  
  696.  asr.w #4,d6
  697.  
  698.  add.w #30,d6
  699.  
  700.  ble.s .okokok
  701.  
  702.  moveq #0,d6
  703.  
  704. .okokok:
  705.  add.w #$1c,d6
  706.  bge.s .okokokok
  707.  moveq #0,d6
  708. .okokokok:
  709.  
  710.  muls d6,d6
  711.  asr.w #5,d6
  712.  
  713. ; cmp.w #28,d6
  714. ; blt.s .okbig
  715. ; move.w #28,d6
  716. ;.okbig
  717.  
  718. .dontbother:
  719.  move.w d6,(a2)+
  720.  
  721.  dbra d7,CALCSPECBRIGHTS
  722.  
  723.  
  724.  
  725.  
  726. * NOW THE POINTS FOR ON-SCREENNESS
  727.  
  728.  move.l #ROTATEDPTS,a2
  729.  move.l PtsPtr,a0
  730.  move.w num_points,d7
  731.  subq #1,d7
  732.  
  733. ROTPTLOP:
  734.  
  735.  move.w (a0)+,d0
  736.  move.w d0,d3
  737.  move.w (a0)+,d1
  738.  move.w (a0)+,d2
  739.  move.w d2,d5
  740.  
  741.  
  742.  
  743.  muls YCOS,d0
  744.  muls YSIN,d2
  745.  sub.l d2,d0
  746.  asr.l #6,d0    ; new x*512
  747.  
  748.  muls YSIN,d3
  749.  muls YCOS,d5
  750.  add.l d5,d3
  751.  add.l d3,d3
  752.  swap d3
  753.  move.w d3,d2    ; new z
  754.  
  755.  move.w d1,d4
  756.  move.w d2,d5
  757.  muls XCOS,d1
  758.  muls XSIN,d2
  759.  sub.l d2,d1
  760.  asr.l #6,d1    ; new y*512
  761.  
  762.  muls XSIN,d4
  763.  muls XCOS,d5
  764.  add.l d5,d4
  765.  add.l d4,d4
  766.  swap d4
  767.  move.w d4,d2    ; new z
  768.  
  769.  ext.l d2
  770.  
  771.  move.w XOFF,d5
  772.  ext.l d5
  773.  asl.l #8,d5
  774.  add.l d5,d5
  775.  add.l d5,d0
  776.  
  777.  move.l d0,(a2)+
  778.  move.l d1,(a2)+
  779.  move.w d2,(a2)+
  780.  
  781.  dbra d7,ROTPTLOP
  782.  
  783. ; Now convert the rotated points to the screen:
  784.  
  785.  move.l #ROTATEDPTS,a0
  786.  move.l #ONSCREENPTS,a2
  787.  move.w num_points,d7
  788.  subq #1,d7
  789. CONVERTTOSCREEN:
  790.  move.l (a0)+,d0
  791.  move.l (a0)+,d1
  792.  move.w (a0)+,d2
  793.  add.w ZOFF,d2
  794.  ext.l d2
  795.  
  796.  move.l d0,d3
  797.  asr.l #1,d3
  798.  add.l d3,d0 
  799.  move.l d1,d3
  800.  asr.l #1,d3
  801.  add.l d3,d1 
  802.  
  803.  divs d2,d0
  804.  divs d2,d1
  805.  add.w #160*4,d0
  806.  add.w #128*4,d1
  807.  move.w d0,(a2)+
  808.  move.w d1,(a2)+
  809.  dbra d7,CONVERTTOSCREEN
  810.  
  811.  move.w #254,HIGHPOLY
  812.  
  813.  move.l LinesPtr,a1
  814.  move.l #PartBuffer,a0
  815.  move.l a0,a2
  816.  move.w #15,d0
  817. clrpartbuffSHAD:
  818.  move.l #$80000001,(a2)+
  819.  move.l #$80000001,(a2)+
  820.  move.l #$80000001,(a2)+
  821.  move.l #$80000001,(a2)+
  822.  dbra d0,clrpartbuffSHAD
  823.  
  824.  move.l #SHADOWPTS,a2
  825.  move.l OBJONOFF,d5
  826.  
  827.  move.w #0,d4
  828.  tst.w SORTIT
  829.  bne.s PutInPartsSHAD
  830.  
  831.  
  832. putinunsortedSHAD:
  833.  move.w (a1)+,d7
  834.  blt doneallpartsSHAD
  835.  lsr.l #1,d5
  836.  bcs.s .yeson
  837.  addq #2,a1
  838.  bra putinunsortedSHAD
  839. .yeson:
  840.  
  841.  move.w (a1)+,d6
  842.  move.l #0,(a0)+
  843.  move.w d7,(a0)+
  844.  move.w d4,(a0)+
  845.  addq #1,d4
  846.  bra putinunsortedSHAD
  847.  
  848. PutInPartsSHAD
  849.  move.w (a1)+,d7
  850.  blt doneallpartsSHAD
  851.  
  852.  lsr.l #1,d5
  853.  bcs.s .yeson
  854.  addq #2,a1
  855.  bra PutInPartsSHAD
  856. .yeson:
  857.  
  858.  move.w (a1)+,d6
  859.  move.l 4(a2,d6.w),d0
  860.  add.l #200000,d0
  861.  
  862.  move.l #PartBuffer-8,a0
  863.  
  864. stillfrontSHAD
  865.  addq #8,a0
  866.  cmp.l (a0),d0
  867.  blt stillfrontSHAD
  868.  move.l #endparttab-8,a5
  869. domoreshiftSHAD:
  870.  move.l -8(a5),(a5)
  871.  move.l -4(a5),4(a5)
  872.  subq #8,a5
  873.  cmp.l a0,a5
  874.  bgt.s domoreshiftSHAD
  875.  
  876.  move.l d0,(a0)
  877.  move.w d7,4(a0)
  878.  move.w d4,6(a0)
  879.  addq #1,d4
  880.  bra PutInPartsSHAD
  881.  
  882. doneallpartsSHAD:
  883.  
  884.  move.l #PartBuffer,a0
  885.  
  886. PartLoopSHAD
  887.  move.l (a0)+,d7
  888.  blt nomorepartsSHAD
  889.  
  890.  move.l #SAVEHIGHS,a2
  891.  move.w 2(a0),d0
  892.  move.w HIGHPOLY,(a2,d0.w*2)
  893.  
  894.  moveq #0,d0
  895.  move.w (a0),d0
  896.  addq #4,a0
  897.  add.l START_OF_OBJECT,d0
  898.  move.l d0,a1
  899.  
  900. polylooSHAD:
  901.  
  902.  tst.w (a1)
  903.  blt.s nomorepolysSHAD
  904.  movem.l a0/a1/d7,-(a7)
  905.  bsr doaSHADEpoly
  906.  movem.l (a7)+,a0/a1/d7
  907.  
  908.  move.w (a1),d0
  909.  lea 18(a1,d0.w*4),a1
  910.  
  911.  bra.s polylooSHAD
  912. nomorepolysSHAD:
  913.  sub.w #1,HIGHPOLY
  914.  bra PartLoopSHAD
  915. nomorepartsSHAD:
  916.  
  917. *******************************************
  918. * Now the on-screen bit...
  919. *******************************************
  920.  
  921.  move.l LinesPtr,a1
  922.  move.l #PartBuffer,a0
  923.  move.l a0,a2
  924.  move.w #15,d0
  925. clrpartbuff:
  926.  move.l #$80000001,(a2)+
  927.  move.l #$80000001,(a2)+
  928.  move.l #$80000001,(a2)+
  929.  move.l #$80000001,(a2)+
  930.  dbra d0,clrpartbuff
  931.  
  932.  move.l #ROTATEDPTS,a2
  933.  move.l OBJONOFF,d5
  934.  
  935.  moveq #0,d4
  936.  
  937.  tst.w SORTIT
  938.  bne.s PutInParts
  939.  
  940. putinunsorted:
  941.  move.w (a1)+,d7
  942.  blt doneallparts
  943.  lsr.l #1,d5
  944.  bcs.s .yeson
  945.  addq #2,a1
  946.  bra putinunsorted
  947. .yeson:
  948.  
  949.  move.w (a1)+,d6
  950.  move.l #0,(a0)+
  951.  move.w d7,(a0)+
  952.  move.w d4,(a0)+
  953.  
  954.  addq #1,d4
  955.  bra putinunsorted
  956.  
  957. PutInParts
  958.  move.w (a1)+,d7
  959.  blt doneallparts
  960.  
  961.  lsr.l #1,d5
  962.  bcs.s .yeson
  963.  addq #2,a1
  964.  bra PutInParts
  965. .yeson:
  966.  
  967.  move.w (a1)+,d6
  968.  move.l (a2,d6.w),d0
  969.  asr.l #8,d0
  970.  asr.l #2,d0
  971.  muls d0,d0
  972.  move.l 4(a2,d6.w),d2
  973.  asr.l #8,d2
  974.  asr.l #2,d2
  975.  muls d2,d2
  976.  add.l d2,d0 
  977.  move.w 8(a2,d6.w),d2
  978.  add.w #1024,d2
  979.  muls d2,d2
  980.  add.l d2,d0
  981.  
  982.  move.l #PartBuffer-8,a0
  983.  
  984. stillfront
  985.  addq #8,a0
  986.  cmp.l (a0),d0
  987.  blt stillfront
  988.  move.l #endparttab-8,a5
  989. domoreshift:
  990.  move.l -8(a5),(a5)
  991.  move.l -4(a5),4(a5)
  992.  subq #8,a5
  993.  cmp.l a0,a5
  994.  bgt.s domoreshift
  995.  
  996.  move.l d0,(a0)
  997.  move.w d7,4(a0)
  998.  move.w d4,6(a0)
  999.  addq #1,d4
  1000.  bra PutInParts
  1001.  
  1002. doneallparts:
  1003.  
  1004.  move.l #PartBuffer,a0
  1005.  
  1006. PartLoop
  1007.  move.l (a0)+,d7
  1008.  blt nomoreparts
  1009.  
  1010.  move.l #SAVEHIGHS,a2
  1011.  move.w 2(a0),d0
  1012.  move.w (a2,d0.w*2),HIGHPOLY
  1013.  
  1014.  moveq #0,d0
  1015.  move.w (a0),d0
  1016.  addq #4,a0
  1017.  add.l START_OF_OBJECT,d0
  1018.  move.l d0,a1
  1019.  
  1020. polyloo:
  1021.  
  1022.  tst.w (a1)
  1023.  blt.s nomorepolys
  1024.  movem.l a0/a1/d7,-(a7)
  1025.  bsr doapoly
  1026.  movem.l (a7)+,a0/a1/d7
  1027.  
  1028.  move.w (a1),d0
  1029.  lea 18(a1,d0.w*4),a1
  1030.  
  1031.  bra.s polyloo
  1032. nomorepolys:
  1033.  sub.w #1,HIGHPOLY
  1034.  bra PartLoop
  1035. nomoreparts:
  1036.  
  1037. NOPOLYS:
  1038.  
  1039.  
  1040.  
  1041. ; btst #6,$bfe001
  1042. ; beq.s .SHOWSHADOW
  1043.  
  1044.  move.l FASTBUFFER,a0
  1045.  add.l #40*320+64,a0
  1046.  move.l #RAWSCRN+40*40+8,a1
  1047.  move.l #(24)-1,d0
  1048.  move.l #175,d1
  1049.  move.w #128,d2
  1050.  move.w #16,d3
  1051.  moveq #0,d4
  1052.  moveq #0,d5
  1053.  jsr CHUNKYTOPLANAR 
  1054.  
  1055.  bra .SHOWNSCRN
  1056.  
  1057. .SHOWSHADOW
  1058.  
  1059.  move.l #SHADOWBUFFER,a0
  1060.  add.l #40*256,a0
  1061.  move.l #RAWSCRN+40*40,a1
  1062.  move.l #(256/8)-1,d0
  1063.  move.l #175,d1
  1064.  move.w #0,d2
  1065.  move.w #8,d3
  1066.  moveq #0,d4
  1067.  moveq #0,d5
  1068.  jsr CHUNKYTOPLANAR 
  1069.  
  1070. .SHOWNSCRN:
  1071.  
  1072.  move.l FASTBUFFER,a0
  1073.  move.l #NEBBIE,a1
  1074.  add.l #40*320+64,a0
  1075.  
  1076.  move.w #175,d0
  1077. clrchunk:
  1078.  move.l (a1)+,(a0)+
  1079.  move.l (a1)+,(a0)+
  1080.  move.l (a1)+,(a0)+
  1081.  move.l (a1)+,(a0)+
  1082.  move.l (a1)+,(a0)+
  1083.  move.l (a1)+,(a0)+
  1084.  move.l (a1)+,(a0)+
  1085.  move.l (a1)+,(a0)+
  1086.  move.l (a1)+,(a0)+
  1087.  move.l (a1)+,(a0)+
  1088.  move.l (a1)+,(a0)+
  1089.  move.l (a1)+,(a0)+
  1090.  move.l (a1)+,(a0)+
  1091.  move.l (a1)+,(a0)+
  1092.  move.l (a1)+,(a0)+
  1093.  move.l (a1)+,(a0)+
  1094.  move.l (a1)+,(a0)+
  1095.  move.l (a1)+,(a0)+
  1096.  move.l (a1)+,(a0)+
  1097.  move.l (a1)+,(a0)+
  1098.  move.l (a1)+,(a0)+
  1099.  move.l (a1)+,(a0)+
  1100.  move.l (a1)+,(a0)+
  1101.  move.l (a1)+,(a0)+
  1102.  move.l (a1)+,(a0)+
  1103.  move.l (a1)+,(a0)+
  1104.  move.l (a1)+,(a0)+
  1105.  move.l (a1)+,(a0)+
  1106.  move.l (a1)+,(a0)+
  1107.  move.l (a1)+,(a0)+
  1108.  move.l (a1)+,(a0)+
  1109.  move.l (a1)+,(a0)+
  1110.  move.l (a1)+,(a0)+
  1111.  move.l (a1)+,(a0)+
  1112.  move.l (a1)+,(a0)+
  1113.  move.l (a1)+,(a0)+
  1114.  move.l (a1)+,(a0)+
  1115.  move.l (a1)+,(a0)+
  1116.  move.l (a1)+,(a0)+
  1117.  move.l (a1)+,(a0)+
  1118.  move.l (a1)+,(a0)+
  1119.  move.l (a1)+,(a0)+
  1120.  move.l (a1)+,(a0)+
  1121.  move.l (a1)+,(a0)+
  1122.  move.l (a1)+,(a0)+
  1123.  move.l (a1)+,(a0)+
  1124.  move.l (a1)+,(a0)+
  1125.  move.l (a1)+,(a0)+
  1126.  add.w #(320-192),a0
  1127.  dbra d0,clrchunk
  1128.  
  1129.  move.l #SHADOWBUFFER,a0
  1130.  move.l #-1,d1
  1131.  move.l #-1,d2
  1132.  move.w #15,d0
  1133. ;clrshad:
  1134. ; move.w #15,d5
  1135. ;innner
  1136. ; move.l d2,(a0)+
  1137. ; move.l d2,(a0)+
  1138. ; move.l d2,(a0)+
  1139. ; move.l d2,(a0)+
  1140. ; move.l d1,(a0)+
  1141. ; move.l d1,(a0)+
  1142. ; move.l d1,(a0)+
  1143. ; move.l d1,(a0)+
  1144. ; move.l d2,(a0)+
  1145. ; move.l d2,(a0)+
  1146. ; move.l d2,(a0)+
  1147. ; move.l d2,(a0)+
  1148. ; move.l d1,(a0)+
  1149. ; move.l d1,(a0)+
  1150. ; move.l d1,(a0)+
  1151. ; move.l d1,(a0)+
  1152. ; move.l d2,(a0)+
  1153. ; move.l d2,(a0)+
  1154. ; move.l d2,(a0)+
  1155. ; move.l d2,(a0)+
  1156. ; move.l d1,(a0)+
  1157. ; move.l d1,(a0)+
  1158. ; move.l d1,(a0)+
  1159. ; move.l d1,(a0)+
  1160. ; move.l d2,(a0)+
  1161. ; move.l d2,(a0)+
  1162. ; move.l d2,(a0)+
  1163. ; move.l d2,(a0)+
  1164. ; move.l d1,(a0)+
  1165. ; move.l d1,(a0)+
  1166. ; move.l d1,(a0)+
  1167. ; move.l d1,(a0)+
  1168. ; move.l d2,(a0)+
  1169. ; move.l d2,(a0)+
  1170. ; move.l d2,(a0)+
  1171. ; move.l d2,(a0)+
  1172. ; move.l d1,(a0)+
  1173. ; move.l d1,(a0)+
  1174. ; move.l d1,(a0)+
  1175. ; move.l d1,(a0)+
  1176. ; move.l d2,(a0)+
  1177. ; move.l d2,(a0)+
  1178. ; move.l d2,(a0)+
  1179. ; move.l d2,(a0)+
  1180. ; move.l d1,(a0)+
  1181. ; move.l d1,(a0)+
  1182. ; move.l d1,(a0)+
  1183. ; move.l d1,(a0)+
  1184. ; move.l d2,(a0)+
  1185. ; move.l d2,(a0)+
  1186. ; move.l d2,(a0)+
  1187. ; move.l d2,(a0)+
  1188. ; move.l d1,(a0)+
  1189. ; move.l d1,(a0)+
  1190. ; move.l d1,(a0)+
  1191. ; move.l d1,(a0)+
  1192. ; move.l d2,(a0)+
  1193. ; move.l d2,(a0)+
  1194. ; move.l d2,(a0)+
  1195. ; move.l d2,(a0)+
  1196. ; move.l d1,(a0)+
  1197. ; move.l d1,(a0)+
  1198. ; move.l d1,(a0)+
  1199. ; move.l d1,(a0)+
  1200. ; dbra d5,innner
  1201. ; exg d1,d2
  1202. ;
  1203. ; dbra d0,clrshad
  1204.  
  1205.  
  1206.  
  1207.     btst #7,$bfe001
  1208.     beq.s exit_closescr
  1209.  
  1210.  
  1211.     add.l #$8000,lmxoff
  1212.     cmp.l #40*65536,lmxoff
  1213.     blt.s .oksm
  1214.     sub.l #40*65536,lmxoff    
  1215. .oksm
  1216.  
  1217.     bra loop
  1218.     
  1219. lmxoff: dc.l 0
  1220.  
  1221. exit_closescr
  1222.     move.l    MyScreen(pc),a0
  1223.     CALLINT CloseScreen
  1224.  
  1225. exit_closeall
  1226.     move.l    _GfxBase(pc),a1
  1227.     CALLEXEC CloseLibrary
  1228.  
  1229. exit_closeint
  1230.     move.l    _IntuitionBase(pc),a1
  1231.     CALLEXEC CloseLibrary
  1232.  
  1233. exit_false
  1234.     move.l    #0,d0                return code
  1235.     rts
  1236.  
  1237. TESTTAB: ds.w 30
  1238.  
  1239. ************************************************
  1240. * SUBROUTINES HERE. ****************************
  1241. ************************************************
  1242.  
  1243. **********************************************************
  1244.  
  1245. * the definition of the screen - note that in assembler you
  1246. * MUST get the sizes of these fields correct, by consulting either
  1247. * the RKM or the header files
  1248.  
  1249.  
  1250. MyNewScreen    dc.w    0,0        left, top
  1251.         dc.w    320,256        width, height
  1252.         dc.w    8        depth
  1253.         dc.b    0,1        pens
  1254.         dc.w    0        viewmodes
  1255.         dc.w    CUSTOMSCREEN    type
  1256.         dc.l    MyFont        font
  1257.         dc.l    screen_title    title
  1258.         dc.l    0        gadgets
  1259.         dc.l    0        bitmap
  1260.  
  1261. * my font definition
  1262. MyFont    dc.l    font_name
  1263.     dc.w    TOPAZ_SIXTY
  1264.     dc.b    FS_NORMAL
  1265.     dc.b    FPF_ROMFONT
  1266.  
  1267. * the variables
  1268. _IntuitionBase    dc.l    0        Intuition lib pointer
  1269. _GfxBase    dc.l    0        graphics lib pointer
  1270. MyScreen        dc.l    0
  1271. MyWindow        dc.l    0
  1272. MyNewWindow    ds.b    nw_SIZE        a buffer
  1273.  
  1274.  
  1275. * some strings
  1276. int_name    INTNAME
  1277. graf_name    GRAFNAME
  1278. hello_message    dc.b    'Hello World'
  1279.  
  1280. * these are C strings, so have to be null terminated
  1281. screen_title    dc.b    'My Own Screen',0
  1282. font_name    dc.b    'topaz.font',0
  1283. window_title    dc.b    'A Simple Window',0
  1284.  
  1285.  even
  1286.  
  1287.  
  1288. doaSHADEpoly:
  1289.  
  1290.  move.w (a1)+,d7    ; sides to draw
  1291.  addq #2,a1        ; avoid holes
  1292.  
  1293.  move.l #SHADOWPTS,a3
  1294.  
  1295.  move.w (a1),d0
  1296.  move.w 4(a1),d1
  1297.  move.w 8(a1),d2
  1298.  muls #10,d0
  1299.  muls #10,d1
  1300.  muls #10,d2
  1301.  move.w 8(a3,d0.w),d3
  1302.  move.w 8(a3,d1.w),d4
  1303.  move.w 8(a3,d2.w),d5
  1304.  move.l (a3,d0.w),d0
  1305.  move.l (a3,d1.w),d1
  1306.  move.l (a3,d2.w),d2
  1307.  asr.l #8,d0
  1308.  asr.l #8,d1
  1309.  asr.l #8,d2
  1310.  asr.l #1,d0
  1311.  asr.l #1,d1
  1312.  asr.l #1,d2
  1313.  
  1314.  sub.w d1,d0
  1315.  sub.w d1,d2
  1316.  sub.w d4,d3
  1317.  sub.w d4,d5
  1318.  muls d3,d2
  1319.  muls d5,d0
  1320.  sub.l d0,d2
  1321.  bge SHADpolybehind
  1322.  
  1323.  move.w #20000,d4    ; top
  1324.  move.w #-20000,d5    ; bottom
  1325.  move.l #UVCOORDS,a4
  1326.  
  1327. putinlinesSHAD:
  1328.  move.w (a1),d0
  1329.  move.w 4(a1),d1
  1330.  
  1331.  moveq #0,d2
  1332.  move.b 2(a1),d2    ; one end U
  1333.  move.w d2,2(a4,d0.w*4)
  1334.  move.b 3(a1),d2    ; one end V
  1335.  move.w d2,(a4,d0.w*4)
  1336.  move.b 6(a1),d2    ; two end U
  1337.  move.w d2,2(a4,d1.w*4)
  1338.  move.b 7(a1),d2    ; two end V
  1339.  move.w d2,(a4,d1.w*4)
  1340.  
  1341.  move.w d0,d2
  1342.  muls #10,d2
  1343.  move.w 8(a3,d2.w),d2    ; Z
  1344.  
  1345.  cmp.w d2,d4
  1346.  ble.s .oktop
  1347.  move.w d2,d4
  1348. .oktop
  1349.  cmp.w d2,d5
  1350.  bge.s .okbot
  1351.  move.w d2,d5
  1352. .okbot
  1353.  
  1354.  movem.l d4/d5/d7/a1/a3/a4,-(a7)
  1355.  bsr SIMPLESHADLINE
  1356.  movem.l (a7)+,d4/d5/d7/a1/a3/a4
  1357.  addq #4,a1
  1358.  dbra d7,putinlinesSHAD
  1359.  addq #4,a1
  1360.   
  1361.  move.w (a1)+,TEXTUREADD
  1362.  
  1363.  asr.w #2,d4
  1364.  asr.w #2,d5
  1365.  add.w #128,d4
  1366.  add.w #128,d5
  1367.  move.w d4,TOPLINE
  1368.  move.w d5,BOTLINE
  1369.  
  1370. * Now draw the shadow polygon....
  1371.  
  1372.  move.l #SHADOWBUFFER,a2
  1373.  move.l #LEFTUVS,a0
  1374.  move.w TOPLINE,d0
  1375.  move.w BOTLINE,d1
  1376.  sub.w d0,d1
  1377.  asl.w #3,d0
  1378.  add.w d0,a0
  1379.  muls #(256/8),d0
  1380.  add.l d0,a2    ; pointer to screen line.
  1381.  
  1382.  subq #1,d1
  1383.  blt NOPOLYGONSHAD
  1384.  
  1385. DOAHORLINESHAD:
  1386.  swap d1
  1387.  
  1388.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1389.  move.w (a0)+,d7
  1390.  sub.w d7,d0
  1391.  blt NOPOLYGONSHAD
  1392.  
  1393.  move.l a2,-(a7)
  1394.  
  1395. ; asr.w #2,d0
  1396. ; asr.w #2,d7
  1397.  add.w d7,a2
  1398.  ext.l d0
  1399.  addq #1,d0
  1400.  
  1401.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1402.  move.w (a0)+,d4
  1403.  swap d7
  1404.  clr.w d7
  1405.  swap d4
  1406.  clr.w d4
  1407.  sub.l d4,d7
  1408.  divs.l d0,d7
  1409.  move.l d7,a5
  1410.  
  1411.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1412.  swap d7
  1413.  clr.w d7
  1414.  move.w (a0)+,d5
  1415.  swap d5
  1416.  clr.w d5
  1417.  sub.l d5,d7
  1418.  divs.l d0,d7
  1419.  move.l d7,a6
  1420.  
  1421.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1422.  swap d7
  1423.  clr.w d7
  1424.  move.w (a0)+,d6
  1425.  swap d6
  1426.  clr.w d6
  1427.  sub.l d6,d7
  1428.  divs.l d0,d7
  1429.  move.l d7,a3
  1430.  
  1431.  move.l a0,-(a7)
  1432.  move.l d1,-(a7)
  1433.  move.l #TEXTURES,a0
  1434.  move.w TEXTUREADD,d7
  1435.  bge.s .okaddtes
  1436.  and.w #$7fff,d7
  1437.  add.l #65536,a0
  1438. .okaddtes:
  1439.  add.w d7,a0
  1440.  move.w #0,d7
  1441.  
  1442.  subq #1,d0
  1443.  
  1444. ; d0=xdist
  1445. ; d4=U  a5=DU
  1446. ; d5=V  a6=DV
  1447. ; d6=Y  a3=DY
  1448.  moveq #0,d1
  1449.  
  1450.  swap d6
  1451.  
  1452. PLOTADOT:
  1453.  
  1454. .across
  1455.  
  1456.  swap d4
  1457.  swap d5
  1458.  move.w d4,d2
  1459.  lsl.w #8,d2
  1460.  swap d4
  1461.  move.b d5,d2
  1462.  add.l a5,d4
  1463.  swap d5
  1464.  add.l a6,d5
  1465.  
  1466.  
  1467. ; swap d6
  1468. ; move.b (a2)+,d1
  1469.  tst.b (a0,d2.w*4)
  1470.  beq.s .noplottt
  1471.  move.b d6,(a2)+
  1472.  
  1473.  dbra d0,.across
  1474.  bra.s .plaster
  1475.  
  1476. .noplottt:
  1477.  addq #1,a2
  1478.  dbra d0,.across
  1479.  
  1480. .plaster:
  1481.  
  1482.  move.l (a7)+,d1
  1483.  move.l (a7)+,a0
  1484.  move.l (a7)+,a2
  1485.  
  1486. .noline:
  1487.  add.w #256,a2
  1488.  
  1489.  swap d1
  1490.  dbra d1,DOAHORLINESHAD
  1491.  
  1492. NOPOLYGONSHAD:
  1493.  
  1494. SHADpolybehind:
  1495.  rts
  1496.  
  1497.  
  1498. ************************************************
  1499.  
  1500. LU: dc.w 0
  1501. LV: dc.w 0
  1502. RU: dc.w 0
  1503. RV: dc.w 0
  1504.     
  1505. SIMPLESHADLINE:
  1506.  move.l #SHADOWPTS,a1
  1507.  
  1508.  move.l #UVCOORDS,a2
  1509.  move.w (a2,d0.w*4),LU
  1510.  move.w 2(a2,d0.w*4),LV
  1511.  move.w (a2,d1.w*4),RU
  1512.  move.w 2(a2,d1.w*4),RV
  1513.  
  1514.  muls #10,d0
  1515.  muls #10,d1
  1516.  move.w 8(a1,d0.w),d2        ;fz
  1517.  move.w 8(a1,d1.w),d7        ;sz
  1518.  ext.l d2
  1519.  ext.l d7
  1520.  
  1521.  move.l #LEFTUVS,a3
  1522.  asr.l #2,d2
  1523.  asr.l #2,d7
  1524.  cmp.l d2,d7 
  1525.  beq .noline
  1526.  
  1527.  bgt.s .lineonright
  1528. .lineonleft:
  1529.  move.l #RIGHTUVS,a3
  1530.  exg d0,d1
  1531.  exg d2,d7
  1532.  
  1533.  move.l LU,d5
  1534.  move.l RU,LU
  1535.  move.l d5,RU
  1536.  
  1537. .lineonright:
  1538.  
  1539.  sub.w d2,d7
  1540.  add.w #128,d2
  1541.  lea (a3,d2.w*8),a3
  1542.  
  1543.  move.w d7,YDIFF
  1544.  
  1545.  move.l (a1,d0.w),d3        ;fx
  1546.  move.l (a1,d1.w),d7        ;sx
  1547.  
  1548.  asl.l #5,d3
  1549.  asl.l #5,d7
  1550.  
  1551.  sub.l d3,d7
  1552.  divs.l YDIFF-2,d7
  1553.  move.l d7,a0    ; dx
  1554.  
  1555.  move.l #ROTATEDPTS,a1
  1556.  
  1557.  move.w LU,d4
  1558.  move.w LV,d5
  1559.  move.w RU,d6
  1560.  move.w RV,d7
  1561.  
  1562.  sub.w d4,d6
  1563.  sub.w d5,d7
  1564.  swap d4
  1565.  swap d5
  1566.  clr.w d4
  1567.  clr.w d5
  1568.  swap d6
  1569.  swap d7
  1570.  clr.w d6
  1571.  clr.w d7
  1572.  
  1573.  divs.l YDIFF-2,d6
  1574.  divs.l YDIFF-2,d7
  1575.  
  1576.  move.l d6,a4
  1577.  move.l d7,a5
  1578.  
  1579. ; asl.w #4,d0
  1580. ; asl.w #4,d1
  1581.  
  1582.  move.l 4(a1,d0.w),d6
  1583.  move.l 4(a1,d1.w),d7
  1584.  asl.l #5,d6
  1585.  asl.l #5,d7
  1586.  sub.l d6,d7
  1587.  divs.l YDIFF-2,d7
  1588.  exg d7,a6
  1589.  exg d7,d6
  1590.  
  1591.  move.l YDIFF-2,d1
  1592.  subq #1,d1
  1593.  
  1594. ; d3=x a0=dx
  1595. ; d4=u a4=du
  1596. ; d5=v a5=dv
  1597. ; d7=y a6=dy
  1598. ; d1=dz
  1599.  
  1600.  move.w HIGHPOLY,d7
  1601.  
  1602.  add.l #128*65536,d3
  1603. ; add.l #128*65536,d7
  1604.  
  1605. .PUTINLINE:
  1606.  swap d3
  1607.  move.w d3,(a3)+
  1608.  swap d3
  1609.  add.l a0,d3
  1610.  swap d4
  1611.  move.w d4,(a3)+
  1612.  swap d4
  1613.  swap d5
  1614.  add.l a4,d4
  1615.  move.w d5,(a3)+
  1616.  swap d5
  1617.  add.l a5,d5
  1618. ; swap d7
  1619.  move.w d7,(a3)+
  1620. ; swap d7
  1621. ; add.l a6,d7
  1622.  dbra d1,.PUTINLINE
  1623.  
  1624. .noline:
  1625.  rts
  1626.  
  1627.  
  1628. **************************************************
  1629.  
  1630. doapoly:
  1631.  
  1632.  move.w (a1)+,d7    ; sides to draw
  1633.  addq #2,a1        ; avoid holes
  1634.  move.w 12(a1,d7.w*4),pregour
  1635.  
  1636.  move.l #ONSCREENPTS,a3
  1637.  
  1638.  move.w (a1),d0
  1639.  move.w 4(a1),d1
  1640.  move.w 8(a1),d2
  1641.  move.w 2(a3,d0.w*4),d3
  1642.  move.w 2(a3,d1.w*4),d4
  1643.  move.w 2(a3,d2.w*4),d5
  1644.  move.w (a3,d0.w*4),d0
  1645.  move.w (a3,d1.w*4),d1
  1646.  move.w (a3,d2.w*4),d2
  1647.  
  1648.  sub.w d1,d0
  1649.  sub.w d1,d2
  1650.  sub.w d4,d3
  1651.  sub.w d4,d5
  1652.  muls d3,d2
  1653.  muls d5,d0
  1654.  sub.l d0,d2
  1655.  ble polybehind
  1656.  
  1657.  move.w #20000,d4    ; top
  1658.  move.w #-20000,d5    ; bottom
  1659.  move.l #UVCOORDS,a4
  1660.  
  1661.  move.l a1,a0
  1662.  
  1663. putinlines:
  1664.  move.w (a1),d0
  1665.  move.w 4(a1),d1
  1666.  
  1667.  moveq #0,d2
  1668.  move.b 2(a1),d2    ; one end U
  1669.  move.w d2,2(a4,d0.w*4)
  1670.  move.b 3(a1),d2    ; one end V
  1671.  move.w d2,(a4,d0.w*4)
  1672.  move.b 6(a1),d2    ; two end U
  1673.  move.w d2,2(a4,d1.w*4)
  1674.  move.b 7(a1),d2    ; two end V
  1675.  move.w d2,(a4,d1.w*4)
  1676.  
  1677.  move.w 2(a3,d0.w*4),d2    ; Z
  1678.  
  1679.  cmp.w d2,d4
  1680.  ble.s .oktop
  1681.  move.w d2,d4
  1682. .oktop
  1683.  cmp.w d2,d5
  1684.  bge.s .okbot
  1685.  move.w d2,d5
  1686. .okbot
  1687.  
  1688.  movem.l a0/d4/d5/d7/a1/a3/a4,-(a7)
  1689.  jsr SIMPLECALCLINE
  1690.  movem.l (a7)+,a0/d4/d5/d7/a1/a3/a4
  1691.  addq #4,a1
  1692.  dbra d7,putinlines
  1693.  addq #4,a1 
  1694.  
  1695.  move.w (a1)+,TEXTUREADD
  1696.  
  1697.  asr.w #2,d4
  1698.  asr.w #2,d5
  1699. ; add.w #128,d4
  1700. ; add.w #128,d5
  1701.  move.w d4,TOPLINE
  1702.  move.w d5,BOTLINE
  1703.   
  1704.  move.l #SHADOWPTS,a1
  1705.  move.w (a0),d0
  1706.  move.w 4(a0),d1
  1707.  move.w 8(a0),d2
  1708.  
  1709. CHECKVALS:
  1710.  
  1711.  muls #10,d0
  1712.  muls #10,d1
  1713.  muls #10,d2
  1714.  
  1715.  lea (a1,d0.w),a0
  1716.  lea (a1,d2.w),a2
  1717.  lea (a1,d1.w),a1
  1718.  
  1719.  move.l (a0),d3
  1720.  sub.l (a1),d3
  1721.  asr.l #8,d3
  1722.  asr.l #1,d3
  1723.  move.l 4(a0),d4
  1724.  sub.l 4(a1),d4
  1725.  asr.l #8,d4
  1726.  asr.l #1,d4
  1727.  move.w 8(a0),d5
  1728.  sub.w 8(a1),d5
  1729.  
  1730.  move.w d3,d6
  1731.  muls d6,d6
  1732.  move.w d4,d7
  1733.  muls d7,d7
  1734.  add.l d7,d6
  1735.  move.w d5,d7
  1736.  muls d7,d7
  1737.  add.l d7,d6
  1738.  move.l d6,d2
  1739.  jsr CALCSQROOT
  1740.  move.w d2,LEN1
  1741.  
  1742.  move.l (a2),d0
  1743.  sub.l (a1),d0
  1744.  asr.l #8,d0
  1745.  asr.l #1,d0
  1746.  move.l 4(a2),d1
  1747.  sub.l 4(a1),d1
  1748.  asr.l #8,d1
  1749.  asr.l #1,d1
  1750.  move.w 8(a2),d2
  1751.  sub.w 8(a1),d2
  1752.  
  1753.  muls d2,d3
  1754.  muls d0,d5
  1755.  sub.l d3,d5    ; length
  1756.  muls.l #$4c,d5
  1757.  
  1758.  muls d0,d0
  1759.  muls d1,d1
  1760.  muls d2,d2
  1761.  add.l d0,d1
  1762.  add.l d1,d2
  1763.  jsr CALCSQROOT
  1764.  
  1765.  muls LEN1,d2
  1766.  bgt.s .ok
  1767.  moveq #1,d2
  1768. .ok
  1769.  
  1770.  divs.l d2,d5
  1771.  
  1772.  add.l #16,d5
  1773.  
  1774.  tst.l d5
  1775.  ble.s .okbr
  1776.  moveq #0,d5
  1777. .okbr:
  1778.  add.w #$3c,d5
  1779.  bge.s .okbr2
  1780.  moveq #0,d5
  1781. .okbr2:
  1782.  
  1783.  move.w d5,d0
  1784.  
  1785.  asl.w #8,d5
  1786.  move.w d5,BRIGHTNESS+2
  1787.  
  1788.  sub.w #$3c,d0
  1789.  asr.w #1,d0
  1790.  add.w #$3c,d0
  1791.  asl.w #8,d0
  1792.  move.w d0,BRIGHTNESS
  1793.  
  1794.  
  1795. ***********************************************
  1796. * Draw the polygon (shadowed).
  1797.  
  1798.  move.l FASTBUFFER,a2
  1799.  move.l #LEFTUVS,a0
  1800.  move.w TOPLINE,d0
  1801.  move.w BOTLINE,d1
  1802.  sub.w d0,d1
  1803.  asl.w #4,d0
  1804.  add.w d0,a0
  1805.  muls #(320/16),d0
  1806.  add.l d0,a2    ; pointer to screen line.
  1807.  
  1808.  subq #1,d1
  1809.  blt NOPOLYGON
  1810.  
  1811.  tst.b Gouraud
  1812.  bne GOURPOLY
  1813.  
  1814. DOAHORLINE:
  1815.  swap d1
  1816.  
  1817.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1818.  move.w (a0)+,d7
  1819.  asr.w #2,d0
  1820.  asr.w #2,d7
  1821.  sub.w d7,d0
  1822.  bge.s .okflibble
  1823.  
  1824.  add.w #14,a0
  1825.  add.w #320,a2
  1826.  swap d1
  1827.  dbra d1,DOAHORLINE
  1828.  bra NOPOLYGON
  1829.  
  1830. .okflibble:
  1831.  
  1832.  move.l a2,-(a7)
  1833.  
  1834.  add.w d7,a2
  1835.  ext.l d0
  1836.  addq #1,d0
  1837.  
  1838.  move.l RIGHTUVS-LEFTUVS(a0),d7
  1839.  move.l (a0)+,d2 
  1840.  sub.l d2,d7
  1841.  divs.l d0,d7
  1842.  move.l d7,a1
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.  
  1859.  
  1860.  
  1861.  move.l RIGHTUVS-LEFTUVS(a0),d7 
  1862.  move.l (a0)+,d3 
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.  
  1881.  
  1882.  
  1883.  sub.l d3,d7
  1884.  divs.l d0,d7
  1885.  move.l d7,a4
  1886.  
  1887.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1888.  move.w (a0)+,d4
  1889.  swap d7
  1890.  clr.w d7
  1891.  swap d4
  1892.  clr.w d4
  1893.  sub.l d4,d7
  1894.  divs.l d0,d7
  1895.  move.l d7,a5
  1896.  
  1897.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1898.  swap d7
  1899.  clr.w d7
  1900.  move.w (a0)+,d5
  1901.  swap d5
  1902.  clr.w d5
  1903.  sub.l d5,d7
  1904.  divs.l d0,d7
  1905.  move.l d7,a6
  1906.  
  1907.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1908.  swap d7
  1909.  clr.w d7
  1910.  move.w (a0)+,d6
  1911.  swap d6
  1912.  clr.w d6
  1913.  sub.l d6,d7
  1914.  divs.l d0,d7
  1915.  move.l d7,a3
  1916.  
  1917.  move.l a0,-(a7)
  1918.  move.l d1,-(a7)
  1919.  move.l #TEXTURES,a0
  1920.  move.w TEXTUREADD,d7
  1921.  bge.s .okaddtes
  1922.  and.w #$7fff,d7
  1923.  add.l #65536,a0
  1924. .okaddtes:
  1925.  add.w d7,a0
  1926.  move.w #0,d7
  1927.  
  1928.  move.l BRIGHTNESS,a6
  1929.  
  1930.  move.l a7,SAVESTACK
  1931.  move.l #SHADOWBUFFER,a7
  1932.  
  1933.  subq #1,d0
  1934.  
  1935. ; d0=xdist
  1936. ; d2=U    a1=DU
  1937. ; d3=V  a4=DV
  1938. ; d4=X  a5=DX
  1939. ; d5=Y  a6=DY
  1940. ; d6=Z  a3=DZ
  1941.  move.w HIGHPOLY,d5
  1942.  
  1943.  moveq #0,d1
  1944.  swap d6
  1945.  move.w d6,d1
  1946.  lsl.w #8,d1
  1947.  swap d4
  1948.  move.b d4,d1
  1949.  swap d4
  1950.  swap d6
  1951.  
  1952.  moveq #0,d7
  1953.  move.b (a7,d1.l),d7
  1954.  cmp.w d7,d5
  1955.  ble INTHELIGHT
  1956.  bra.s INTHEDARK
  1957.  
  1958. PENUMBRA:
  1959.  moveq #0,d1
  1960.  swap d6
  1961.  move.w d6,d1
  1962.  lsl.w #8,d1
  1963.  swap d4
  1964.  move.b d4,d1
  1965.  swap d4
  1966.  swap d6
  1967.  add.l a5,d4
  1968.  add.l a3,d6
  1969.  
  1970.  moveq #0,d7
  1971.  move.b (a7,d1.l),d7
  1972.  cmp.w d7,d5
  1973.  ble INTOLIGHT
  1974.  bra.s INTODARK
  1975.  
  1976.  
  1977. INTHEDARK:
  1978.  moveq #0,d1
  1979.  swap d6
  1980.  move.w d6,d1
  1981.  lsl.w #8,d1
  1982.  swap d4
  1983.  move.b d4,d1
  1984.  swap d4
  1985.  swap d6
  1986.  add.l a5,d4
  1987.  add.l a3,d6
  1988.  
  1989.  moveq #0,d7
  1990.  move.b (a7,d1.l),d7
  1991.  cmp.w d7,d5
  1992.  ble.s INTOPENUM
  1993. INTODARK:
  1994.  move.w #$3c00,d7
  1995.  swap d2
  1996.  move.w d2,d1
  1997.  asl.w #8,d1
  1998.  swap d3
  1999.  move.b d3,d1
  2000.  swap d2
  2001.  swap d3
  2002.  add.l a1,d2
  2003.  add.l a4,d3
  2004.  
  2005.  move.b (a0,d1.w*4),d7
  2006.  beq.s .noplottt
  2007.  
  2008.  move.b TEXTUREPAL-256(pc,d7.w),(a2)+
  2009.  dbra d0,INTHEDARK
  2010.  bra.s PASTAC 
  2011.  
  2012. .noplottt
  2013.  addq #1,a2
  2014.  dbra d0,INTHEDARK
  2015.  bra.s PASTAC
  2016.  
  2017. INTOPENUM:
  2018.  move.l a6,d7
  2019.  swap d7
  2020.  swap d2
  2021.  move.w d2,d1
  2022.  asl.w #8,d1
  2023.  swap d3
  2024.  move.b d3,d1
  2025.  swap d2
  2026.  swap d3
  2027.  add.l a1,d2
  2028.  add.l a4,d3
  2029.  
  2030.  move.b (a0,d1.w*4),d7
  2031.  beq.s .noplottt
  2032.  
  2033.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2034.  dbra d0,PENUMBRA
  2035.  bra.s PASTAC 
  2036.  
  2037. .noplottt
  2038.  addq #1,a2
  2039.  dbra d0,PENUMBRA
  2040.  bra.s PASTAC
  2041.  
  2042. INTHELIGHT:
  2043.  
  2044.  moveq #0,d1
  2045.  swap d6
  2046.  move.w d6,d1
  2047.  lsl.w #8,d1
  2048.  swap d4
  2049.  move.b d4,d1
  2050.  swap d4
  2051.  swap d6
  2052.  add.l a5,d4
  2053.  add.l a3,d6
  2054.  
  2055.  moveq #0,d7
  2056.  move.b (a7,d1.l),d7
  2057.  cmp.w d7,d5
  2058.  bgt.s INTOPENUM
  2059. INTOLIGHT:
  2060.  move.w a6,d7
  2061.  swap d2
  2062.  move.w d2,d1
  2063.  asl.w #8,d1
  2064.  swap d3
  2065.  move.b d3,d1
  2066.  swap d2
  2067.  swap d3
  2068.  add.l a1,d2
  2069.  add.l a4,d3
  2070.  
  2071.  move.b (a0,d1.w*4),d7
  2072.  beq.s .noplottt
  2073.  
  2074.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2075.  dbra d0,INTHELIGHT
  2076.  bra.s PASTAC 
  2077.  
  2078. .noplottt:
  2079.  addq #1,a2
  2080.  dbra d0,INTHELIGHT
  2081.  
  2082. PASTAC
  2083.  
  2084.  move.l SAVESTACK,a7
  2085.  
  2086.  move.l (a7)+,d1
  2087.  move.l (a7)+,a0
  2088.  move.l (a7)+,a2
  2089.  
  2090. .noline:
  2091.  add.w #320,a2
  2092.  
  2093.  swap d1
  2094.  dbra d1,DOAHORLINE
  2095.  
  2096.  
  2097.  bra NOPOLYGON
  2098.  
  2099. TEXTUREPAL: incbin "ab3:includes/shadow.pal"
  2100.  
  2101. SAVESTACK: dc.l 0
  2102. HIGHPOLY: dc.w 0
  2103. LEN1: dc.w 0
  2104. BRIGHTNESS: dc.l 0
  2105. TRANSTEXT: dc.w 0
  2106. AANG: dc.w 0
  2107. BANG: dc.w 0
  2108. CANG: dc.w 0
  2109. DANG: dc.w 0
  2110.  
  2111. NOPOLYGON:
  2112. polybehind:
  2113.  rts
  2114.  
  2115.  
  2116. GOURPOLY: 
  2117.  
  2118. DOAHORLINEGOUR:
  2119.  swap d1
  2120.  
  2121.  move.w RIGHTUVS-LEFTUVS(a0),d0
  2122.  move.w (a0)+,d7
  2123.  asr.w #2,d0
  2124.  asr.w #2,d7
  2125.  sub.w d7,d0
  2126.  bge.s .okflibble
  2127.  
  2128.  add.w #14,a0
  2129.  add.w #320,a2
  2130.  swap d1
  2131.  dbra d1,DOAHORLINEGOUR
  2132.  bra NOPOLYGON
  2133.  
  2134. .okflibble:
  2135.  
  2136.  move.l a2,-(a7)
  2137.  
  2138.  add.w d7,a2
  2139.  ext.l d0
  2140.  addq #1,d0
  2141.  
  2142.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2143.  move.l (a0)+,d2 
  2144.  
  2145.  moveq #0,d3
  2146.  moveq #0,d5
  2147.  move.w d2,d3
  2148.  move.w d7,d5
  2149.  swap d3
  2150.  swap d5
  2151.  sub.l d3,d5
  2152.  divs.l d0,d5
  2153.  asr.l #8,d5
  2154.  move.w d5,RIGHTBRIGHT
  2155.  asr.l #8,d3
  2156.  move.w d3,LEFTBRIGHT
  2157.  
  2158.  clr.w d2
  2159.  clr.w d7
  2160.  sub.l d2,d7
  2161.  asl.l #8,d2
  2162.  divs.l d0,d7
  2163.  asl.l #8,d7
  2164.  
  2165.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2166.  move.l (a0)+,d3
  2167.  
  2168.  moveq #0,d4
  2169.  moveq #0,d5
  2170.  move.w d6,d5
  2171.  move.w d3,d4
  2172.  swap d5
  2173.  swap d4
  2174.  
  2175.  sub.l d4,d5
  2176.  divs.l d0,d5
  2177.  asr.l #8,d4
  2178.  asr.l #8,d5
  2179.  
  2180.  move.w d4,d2
  2181.  ext.l d5
  2182.  move.w d5,d7
  2183.  move.l d7,a1
  2184.   
  2185.  clr.w d3
  2186.  clr.w d6
  2187.  sub.l d3,d6
  2188.  divs.l d0,d6
  2189.  move.l d6,a4
  2190.  
  2191.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2192.  move.w (a0)+,d4
  2193.  swap d7
  2194.  clr.w d7
  2195.  swap d4
  2196.  clr.w d4
  2197.  sub.l d4,d7
  2198.  divs.l d0,d7
  2199.  move.l d7,a5
  2200.  
  2201. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2202. ; swap d7
  2203. ; clr.w d7
  2204.  move.w (a0)+,d5
  2205. ; swap d5
  2206. ; clr.w d5
  2207. ; sub.l d5,d7
  2208. ; divs.l d0,d7
  2209. ; move.l d7,a6
  2210.  
  2211.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2212.  swap d7
  2213.  clr.w d7
  2214.  move.w (a0)+,d6
  2215.  swap d6
  2216.  clr.w d6
  2217.  sub.l d6,d7
  2218.  divs.l d0,d7
  2219.  move.l d7,a3
  2220.  
  2221.  move.l a0,-(a7)
  2222.  move.l d1,-(a7)
  2223.  move.l #TEXTURES,a0
  2224.  move.w TEXTUREADD,d7
  2225.  bge.s .okaddtes
  2226.  and.w #$7fff,d7
  2227.  add.l #65536,a0
  2228. .okaddtes:
  2229.  add.w d7,a0
  2230.  move.w #0,d7
  2231.  
  2232.  move.l RIGHTBRIGHT,a6
  2233.  move.w LEFTBRIGHT,d5
  2234.  swap d5
  2235.  
  2236.  move.l a7,SAVESTACK
  2237.  move.l #SHADOWBUFFER,a7
  2238.  
  2239.  subq #1,d0
  2240.  
  2241. ; d0=xdist
  2242. ; d2=U    a1=DU
  2243. ; d3=V  a4=DV
  2244. ; d4=X  a5=DX
  2245. ; d5=Y  a6=DY
  2246. ; d6=Z  a3=DZ
  2247.  move.w HIGHPOLY,d5
  2248.  
  2249.  moveq #0,d1
  2250.  swap d6
  2251.  move.w d6,d1
  2252.  lsl.w #8,d1
  2253.  swap d4
  2254.  move.b d4,d1
  2255.  swap d4
  2256.  swap d6
  2257.  
  2258.  moveq #0,d7
  2259.  move.b (a7,d1.l),d7
  2260.  cmp.w d7,d5
  2261.  ble INTHELIGHTGOUR
  2262.  bra.s INTHEDARKGOUR
  2263.  
  2264. PENUMBRAGOUR:
  2265.  moveq #0,d1
  2266.  swap d6
  2267.  move.w d6,d1
  2268.  lsl.w #8,d1
  2269.  swap d4
  2270.  move.b d4,d1
  2271.  swap d4
  2272.  swap d6
  2273.  add.l a5,d4
  2274.  add.l a3,d6
  2275.  add.l a6,d5
  2276.  
  2277.  moveq #0,d7
  2278.  move.b (a7,d1.l),d7
  2279.  cmp.w d7,d5
  2280.  ble INTOLIGHTGOUR
  2281.  bra.s INTODARKGOUR
  2282.  
  2283. INTHEDARKGOUR:
  2284.  moveq #0,d1
  2285.  swap d6
  2286.  move.w d6,d1
  2287.  lsl.w #8,d1
  2288.  swap d4
  2289.  move.b d4,d1
  2290.  swap d4
  2291.  swap d6
  2292.  add.l a5,d4
  2293.  add.l a3,d6
  2294.  add.l a6,d5
  2295.  
  2296.  moveq #0,d7
  2297.  move.b (a7,d1.l),d7
  2298.  cmp.w d7,d5
  2299.  ble.s INTOPENUMGOUR
  2300. INTODARKGOUR:
  2301.  move.w #$3c00,d7
  2302.  swap d2
  2303.  move.w d2,d1
  2304.  swap d3
  2305.  move.b d3,d1
  2306.  swap d2
  2307.  swap d3
  2308.  add.l a1,d2
  2309.  add.l a4,d3
  2310.  
  2311.  move.b (a0,d1.w*4),d7
  2312.  bne.s DARKplottt
  2313.  
  2314. .noplottt
  2315.  addq #1,a2
  2316.  dbra d0,INTHEDARKGOUR
  2317.  bra PASTACGOUR
  2318.  
  2319. INTOPENUMGOUR:
  2320.  move.l d5,d7
  2321.  swap d7
  2322.  
  2323.  sub.w #$3c00,d7
  2324.  asr.w #1,d7
  2325.  add.w #$3c00,d7
  2326.  
  2327.  swap d2
  2328.  move.w d2,d1
  2329.  swap d3
  2330.  move.b d3,d1
  2331.  swap d2
  2332.  swap d3
  2333.  add.l a1,d2
  2334.  add.l a4,d3
  2335.  
  2336.  move.b (a0,d1.w*4),d7
  2337.  bne.s PENUMplottt
  2338. .noplottt
  2339.  addq #1,a2
  2340.  dbra d0,PENUMBRAGOUR
  2341.  bra PASTACGOUR
  2342.  
  2343. PENUMplottt
  2344.  move.w d2,d1
  2345.  move.b GOURPAL(pc,d7.w),d1
  2346.  move.b GOURPAL(pc,d7.w),(a2)+
  2347.  dbra d0,PENUMBRAGOUR
  2348.  bra PASTACGOUR
  2349.  
  2350. DARKplottt
  2351.  move.w d2,d1
  2352.  add.w #256,d1
  2353.  move.b GOURPAL(pc,d7.w),d1
  2354.  move.b GOURPAL(pc,d7.w),(a2)+
  2355.  
  2356.  dbra d0,INTHEDARKGOUR
  2357.  bra PASTACGOUR
  2358.  
  2359.  
  2360. INTHELIGHTGOUR:
  2361.  
  2362.  moveq #0,d1
  2363.  swap d6
  2364.  move.w d6,d1
  2365.  lsl.w #8,d1
  2366.  swap d4
  2367.  move.b d4,d1
  2368.  swap d4
  2369.  swap d6
  2370.  add.l a5,d4
  2371.  add.l a3,d6
  2372.  add.l a6,d5
  2373.  
  2374.  moveq #0,d7
  2375.  move.b (a7,d1.l),d7
  2376.  cmp.w d7,d5
  2377.  bgt.s INTOPENUMGOUR
  2378. INTOLIGHTGOUR:
  2379.  move.l d5,d7
  2380.  swap d7
  2381.  swap d2
  2382.  move.w d2,d1
  2383.  swap d3
  2384.  move.b d3,d1
  2385.  swap d2
  2386.  swap d3
  2387.  add.l a1,d2
  2388.  add.l a4,d3
  2389.  
  2390.  move.b (a0,d1.w*4),d7
  2391.  beq.s .noplottt
  2392.  
  2393.  move.w d2,d1
  2394.  move.b GOURPAL(pc,d7.w),d1
  2395.  move.b GOURPAL(pc,d1.w),(a2)+
  2396.  dbra d0,INTHELIGHTGOUR
  2397.  bra PASTACGOUR 
  2398.  
  2399. .noplottt:
  2400.  addq #1,a2
  2401.  dbra d0,INTHELIGHTGOUR
  2402.  bra PASTACGOUR
  2403.  
  2404. GOURPAL: incbin "ab3:includes/shadow.pal"
  2405.  
  2406. PASTACGOUR:
  2407.  
  2408.  move.l SAVESTACK,a7
  2409.  
  2410.  move.l (a7)+,d1
  2411.  move.l (a7)+,a0
  2412.  move.l (a7)+,a2
  2413.  
  2414. .noline:
  2415.  add.w #320,a2
  2416.  
  2417.  swap d1
  2418.  dbra d1,DOAHORLINEGOUR
  2419.  
  2420.  bra NOPOLYGON
  2421.  
  2422.  
  2423. ********************************************
  2424. ***********************************
  2425. ***************************
  2426. *******************
  2427. DORIGHTLEFT:
  2428.  
  2429.  add.w d0,a2
  2430.  
  2431.  add.l d7,d2
  2432.  neg.l d7
  2433.  
  2434.  add.w d5,d4
  2435.  neg.w d5
  2436.  
  2437.  move.w d4,d2
  2438.  move.w d5,d7
  2439.  move.l d7,a1
  2440.   
  2441.   
  2442.  exg d3,d6 
  2443.  clr.w d3
  2444.  clr.w d6
  2445.  sub.l d3,d6
  2446.  divs.l d0,d6
  2447.  move.l d6,a4
  2448.  
  2449.  move.w LEFTBRIGHT,d6
  2450.  move.w RIGHTBRIGHT,d7
  2451.  add.w d7,d6
  2452.  neg.w d6
  2453.  move.w d6,LEFTBRIGHT
  2454.  move.w d7,RIGHTBRIGHT
  2455.  
  2456.  move.w RIGHTUVS-LEFTUVS(a0),d4
  2457.  move.w (a0)+,d7
  2458.  swap d7
  2459.  clr.w d7
  2460.  swap d4
  2461.  clr.w d4
  2462.  sub.l d4,d7
  2463.  divs.l d0,d7
  2464.  move.l d7,a5
  2465.  
  2466.  move.w RIGHTUVS-LEFTUVS(a0),d5
  2467.  swap d5
  2468.  clr.w d5
  2469.  move.w (a0)+,d7
  2470.  swap d7
  2471.  clr.w d7
  2472.  sub.l d5,d7
  2473.  divs.l d0,d7
  2474.  move.l d7,a6
  2475.  
  2476.  move.w RIGHTUVS-LEFTUVS(a0),d6
  2477.  swap d6
  2478.  clr.w d6
  2479.  move.w (a0)+,d7
  2480.  swap d7
  2481.  clr.w d7
  2482.  sub.l d6,d7
  2483.  divs.l d0,d7
  2484.  swap d7
  2485.  move.l d7,a3
  2486.  
  2487.  move.l a0,-(a7)
  2488.  move.l d1,-(a7)
  2489.  move.l #TEXTURES,a0
  2490.  move.w TEXTUREADD,d7
  2491.  bge.s .okaddtes
  2492.  and.w #$7fff,d7
  2493.  add.l #65536,a0
  2494. .okaddtes:
  2495.  add.w d7,a0
  2496.  move.w #0,d7
  2497.  
  2498.  move.l RIGHTBRIGHT,a6
  2499.  move.w LEFTBRIGHT,d5
  2500.  swap d5
  2501.  
  2502.  move.l a7,SAVESTACK
  2503.  move.l #SHADOWBUFFER,a7
  2504.  
  2505.  subq #1,d0
  2506.  
  2507. ; d0=xdist
  2508. ; d2=U    a1=DU
  2509. ; d3=V  a4=DV
  2510. ; d4=X  a5=DX
  2511. ; d5=Y  a6=DY
  2512. ; d6=Z  a3=DZ
  2513.  move.w HIGHPOLY,d5
  2514.  
  2515.  moveq #0,d1
  2516.  swap d6
  2517.  move.w d6,d1
  2518.  lsl.w #8,d1
  2519.  swap d4
  2520.  move.b d4,d1
  2521.  swap d4
  2522.  swap d6
  2523.  
  2524.  moveq #0,d7
  2525.  move.b (a7,d1.l),d7
  2526.  cmp.w d7,d5
  2527.  ble INTHELIGHTGOURRL
  2528.  bra.s INTHEDARKGOURRL
  2529.  
  2530. PENUMBRAGOURRL:
  2531.  moveq #0,d1
  2532.  swap d6
  2533.  move.w d6,d1
  2534.  lsl.w #8,d1
  2535.  swap d4
  2536.  move.b d4,d1
  2537.  swap d4
  2538.  swap d6
  2539.  add.l a5,d4
  2540.  add.l a3,d6
  2541.  add.l a6,d5
  2542.  
  2543.  moveq #0,d7
  2544.  move.b (a7,d1.l),d7
  2545.  cmp.w d7,d5
  2546.  ble INTOLIGHTGOURRL
  2547.  bra.s INTODARKGOURRL
  2548.  
  2549.  
  2550. INTHEDARKGOURRL:
  2551.  moveq #0,d1
  2552.  swap d6
  2553.  move.w d6,d1
  2554.  lsl.w #8,d1
  2555.  swap d4
  2556.  move.b d4,d1
  2557.  swap d4
  2558.  swap d6
  2559.  add.l a5,d4
  2560.  add.l a3,d6
  2561.  add.l a6,d5
  2562.  
  2563.  moveq #0,d7
  2564.  move.b (a7,d1.l),d7
  2565.  cmp.w d7,d5
  2566.  ble.s INTOPENUMGOURRL
  2567. INTODARKGOURRL:
  2568.  move.w #$3c00,d7
  2569.  swap d2
  2570.  move.w d2,d1
  2571.  swap d3
  2572.  move.b d3,d1
  2573.  swap d2
  2574.  swap d3
  2575.  add.l a1,d2
  2576.  add.l a4,d3
  2577.  
  2578.  move.b (a0,d1.w*4),d7
  2579.  bne.s DARKplotttRL
  2580.  
  2581. .noplottt
  2582.  subq #1,a2
  2583.  dbra d0,INTHEDARKGOURRL
  2584.  bra PASTACGOUR
  2585.  
  2586. INTOPENUMGOURRL:
  2587.  move.l d5,d7
  2588.  swap d7
  2589.  
  2590.  sub.w #$3c00,d7
  2591.  asr.w #1,d7
  2592.  add.w #$3c00,d7
  2593.  
  2594.  swap d2
  2595.  move.w d2,d1
  2596.  swap d3
  2597.  move.b d3,d1
  2598.  swap d2
  2599.  swap d3
  2600.  add.l a1,d2
  2601.  add.l a4,d3
  2602.  
  2603.  move.b (a0,d1.w*4),d7
  2604.  bne.s PENUMplotttRL
  2605. .noplottt
  2606.  subq #1,a2
  2607.  dbra d0,PENUMBRAGOURRL
  2608.  bra PASTACGOUR
  2609.  
  2610. PENUMplotttRL
  2611.  move.w d2,d1
  2612.  move.b GOURPALRL(pc,d7.w),d1
  2613.  move.b GOURPALRL(pc,d1.w),-(a2)
  2614.  dbra d0,PENUMBRAGOUR
  2615.  bra PASTACGOUR
  2616.  
  2617. DARKplotttRL
  2618.  move.w d2,d1
  2619.  add.w #256,d1
  2620.  move.b GOURPALRL(pc,d7.w),d1
  2621.  move.b GOURPALRL(pc,d1.w),-(a2)
  2622.  
  2623.  dbra d0,INTHEDARKGOURRL
  2624.  bra PASTACGOUR
  2625.  
  2626.  
  2627. INTHELIGHTGOURRL:
  2628.  
  2629.  moveq #0,d1
  2630.  swap d6
  2631.  move.w d6,d1
  2632.  lsl.w #8,d1
  2633.  swap d4
  2634.  move.b d4,d1
  2635.  swap d4
  2636.  swap d6
  2637.  add.l a5,d4
  2638.  add.l a3,d6
  2639.  add.l a6,d5
  2640.  
  2641.  moveq #0,d7
  2642.  move.b (a7,d1.l),d7
  2643.  cmp.w d7,d5
  2644.  bgt.s INTOPENUMGOURRL
  2645. INTOLIGHTGOURRL:
  2646.  move.l d5,d7
  2647.  swap d7
  2648.  swap d2
  2649.  move.w d2,d1
  2650.  swap d3
  2651.  move.b d3,d1
  2652.  swap d2
  2653.  swap d3
  2654.  add.l a1,d2
  2655.  add.l a4,d3
  2656.  
  2657.  move.b (a0,d1.w*4),d7
  2658.  beq.s .noplottt
  2659.  
  2660.  move.w d2,d1
  2661.  move.b GOURPALRL(pc,d7.w),d1
  2662.  move.b GOURPALRL(pc,d1.w),-(a2)
  2663.  dbra d0,INTHELIGHTGOURRL
  2664.  bra PASTACGOUR 
  2665.  
  2666. .noplottt:
  2667.  subq #1,a2
  2668.  dbra d0,INTHELIGHTGOURRL
  2669.  bra PASTACGOUR
  2670.  
  2671. GOURPALRL: incbin "ab3:includes/shadow.pal"
  2672.  
  2673.  
  2674. TOPPTR: dc.l 0
  2675. TOPPTNUM: dc.w 0
  2676. BOTPTNUM: dc.w 0
  2677. LEFTBRIGHT: dc.w 0
  2678. RIGHTBRIGHT: dc.l 0
  2679. LEFTSPEC: dc.w 0
  2680. RIGHTSPEC: dc.w 0
  2681.  
  2682. ***********************************************
  2683.     
  2684. SIMPLECALCLINE:
  2685.  move.l #ONSCREENPTS,a1
  2686.  
  2687.  move.w 2(a1,d0.w*4),d2        ;fy
  2688.  move.w 2(a1,d1.w*4),d7        ;sy
  2689.  
  2690.  move.l #RIGHTUVS,a3
  2691.  asr.w #2,d2
  2692.  asr.w #2,d7
  2693.  cmp.w d2,d7 
  2694.  beq .noline
  2695.  
  2696.  bgt.s .lineonright
  2697. .lineonleft:
  2698.  move.l #LEFTUVS,a3
  2699.  exg d0,d1
  2700.  exg d2,d7
  2701.  
  2702. .lineonright:
  2703.  move.w d0,TOPPTNUM
  2704.  move.w d1,BOTPTNUM
  2705.  
  2706.  sub.w d2,d7
  2707.  asl.w #4,d2
  2708.  add.w d2,a3
  2709.  move.l a3,TOPPTR
  2710.  
  2711.  move.w d7,YDIFF
  2712.  
  2713.  move.w (a1,d0.w*4),d3        ;fx
  2714.  move.w (a1,d1.w*4),d7        ;sx
  2715.  
  2716.  sub.w d3,d7
  2717.  swap d3
  2718.  swap d7
  2719.  clr.w d3
  2720.  clr.w d7
  2721.  divs.l YDIFF-2,d7
  2722.  move.l d7,a0    ; dx
  2723.  
  2724.  move.l #UVCOORDS,a2
  2725.  move.l #SHADOWPTS,a1
  2726.  
  2727.  move.w (a2,d0.w*4),d4
  2728.  move.w 2(a2,d0.w*4),d5
  2729.  move.w (a2,d1.w*4),d6
  2730.  move.w 2(a2,d1.w*4),d7
  2731.  
  2732.  sub.w d4,d6
  2733.  sub.w d5,d7
  2734.  swap d4
  2735.  swap d5
  2736.  clr.w d4
  2737.  clr.w d5
  2738.  swap d6
  2739.  swap d7
  2740.  clr.w d6
  2741.  clr.w d7
  2742.  
  2743.  divs.l YDIFF-2,d6
  2744.  divs.l YDIFF-2,d7
  2745.  
  2746.  move.l d6,a4
  2747.  move.l d7,a5
  2748.  
  2749.  muls #10,d0
  2750.  muls #10,d1
  2751.  move.l (a1,d0.w),d6
  2752.  
  2753.  move.l (a1,d1.w),d7
  2754.  asl.l #5,d6
  2755.  asl.l #5,d7
  2756.  sub.l d6,d7
  2757.  divs.l YDIFF-2,d7
  2758.  move.l d7,a2
  2759.  move.l d6,a6
  2760.  
  2761.  move.l 4(a1,d0.w),d6
  2762.  move.l 4(a1,d1.w),d7
  2763.  asl.l #5,d6
  2764.  asl.l #5,d7
  2765.  sub.l d6,d7
  2766.  divs.l YDIFF-2,d7
  2767.  exg d7,a6
  2768.  exg d7,d6
  2769.  
  2770.  move.w 8(a1,d0.w),d0
  2771.  move.w 8(a1,d1.w),d1
  2772.  swap d0
  2773.  swap d1
  2774.  clr.w d0
  2775.  clr.w d1
  2776.  asr.l #2,d0
  2777.  asr.l #2,d1
  2778.  sub.l d0,d1
  2779.  divs.l YDIFF-2,d1
  2780.  move.l d1,a1
  2781.  move.l YDIFF-2,d1
  2782.  subq #1,d1
  2783.  
  2784. ; d3=sx a0=dsx
  2785. ; d4=u a4=du
  2786. ; d5=v a5=dv
  2787. ; d6=x a2=dx
  2788. ; d7=y a6=dy
  2789. ; d0=z a1=dz
  2790. ; d1=dsy
  2791.  
  2792.  
  2793.  add.l #128*65536,d6
  2794.  add.l #128*65536,d7
  2795.  add.l #128*65536,d0
  2796.  
  2797. .PUTINLINE:
  2798.  swap d3
  2799.  move.w d3,(a3)+
  2800.  swap d3
  2801.  add.l a0,d3
  2802.  move.l d4,(a3)+
  2803.  add.l a4,d4
  2804.  move.l d5,(a3)+
  2805.  swap d6
  2806.  add.l a5,d5
  2807.  move.w d6,(a3)+
  2808.  swap d6
  2809.  swap d7
  2810.  add.l a2,d6
  2811.  move.w d7,(a3)+
  2812.  swap d7
  2813.  swap d0
  2814.  add.l a6,d7
  2815.  move.w d0,(a3)+
  2816.  swap d0
  2817.  add.l a1,d0
  2818.  dbra d1,.PUTINLINE
  2819.  
  2820.  tst.b Gouraud
  2821.  beq .noline
  2822.  
  2823.  move.w TOPPTNUM,d0
  2824.  move.w BOTPTNUM,d1
  2825.  move.l TOPPTR,a3
  2826.  moveq #0,d4
  2827.  move.w YDIFF,d4
  2828.  
  2829.  move.l #SPECBRIGHTS,a2
  2830.  move.w (a2,d0.w*2),d2
  2831.  move.w (a2,d1.w*2),d3
  2832.  move.l #NORMBRIGHTS,a2
  2833.  move.w (a2,d0.w*2),d0
  2834.  move.w (a2,d1.w*2),d1
  2835.  
  2836.  sub.w d0,d1
  2837.  swap d1
  2838.  swap d0
  2839.  clr.w d0
  2840.  clr.w d1
  2841.  divs.l d4,d1
  2842.  sub.w d2,d3
  2843.  swap d2
  2844.  swap d3
  2845.  clr.w d2
  2846.  clr.w d3
  2847.  divs.l d4,d3
  2848.  
  2849.  subq #1,d4
  2850.  
  2851. .STICKINGOUR:
  2852.  swap d0
  2853.  move.w d0,4(a3)
  2854.  swap d0
  2855.  add.l d1,d0
  2856.  swap d2
  2857.  move.w d2,8(a3)
  2858.  adda.w #16,a3
  2859.  swap d2
  2860.  add.l d3,d2
  2861.  dbra d4,.STICKINGOUR
  2862.  
  2863. .noline:
  2864.  rts
  2865.  
  2866.  
  2867. *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2868.  
  2869.  
  2870.  
  2871.  
  2872. ************************************************
  2873. ************************************************
  2874. ************************************************
  2875. ************************************************
  2876. ************************************************
  2877. ************************************************
  2878. ************************************************
  2879. ************************************************
  2880. ************************************************
  2881. ************************************************
  2882. ************************************************
  2883. ************************************************
  2884. ************************************************
  2885. ************************************************
  2886. ************************************************
  2887. ************************************************
  2888. ************************************************
  2889.  
  2890.  move.w d3,TOPLINE
  2891.  move.w d4,BOTLINE
  2892.  
  2893.  
  2894.  
  2895.  
  2896. *********************************************
  2897.  
  2898. CALCSQROOT:
  2899.  tst.l d2
  2900.  beq .oksqr
  2901.  
  2902.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  2903.  
  2904.  move.w #31,d0
  2905. .findhigh
  2906.  btst d0,d2
  2907.  bne .foundhigh
  2908.  dbra d0,.findhigh
  2909. .foundhigh
  2910.  asr.w #1,d0
  2911.  clr.l d3
  2912.  bset d0,d3
  2913.  move.l d3,d0
  2914.  
  2915.  move.w d0,d1
  2916.  muls d1,d1    ; x*x
  2917.  sub.l d2,d1    ; x*x-a
  2918.  asr.l #1,d1    ; (x*x-a)/2
  2919.  divs d0,d1    ; (x*x-a)/2x
  2920.  sub.w d1,d0    ; second approx
  2921.  bgt .stillnot0
  2922.  move.w #1,d0
  2923. .stillnot0
  2924.  
  2925.  move.w d0,d1
  2926.  muls d1,d1
  2927.  sub.l d2,d1
  2928.  asr.l #1,d1
  2929.  divs d0,d1
  2930.  sub.w d1,d0    ; second approx
  2931.  bgt .stillnot02
  2932.  move.w #1,d0
  2933. .stillnot02
  2934.  
  2935.  move.w d0,d1
  2936.  muls d1,d1
  2937.  sub.l d2,d1
  2938.  asr.l #1,d1
  2939.  divs d0,d1
  2940.  sub.w d1,d0    ; second approx
  2941.  bgt .stillnot03
  2942.  move.w #1,d0
  2943. .stillnot03
  2944.  
  2945.  move.w d0,d2
  2946.  ext.l d2
  2947.  
  2948.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  2949.  
  2950. .oksqr
  2951.  rts
  2952.  
  2953.  
  2954. **********************************************
  2955. **********************************************
  2956. **********************************************
  2957. **********************************************
  2958. **********************************************
  2959. **********************    ************************
  2960. **********************************************
  2961. **********************************************
  2962. **********************************************
  2963. **********************************************
  2964. **********************************************
  2965. **********************************************
  2966. **********************************************
  2967. **********************************************
  2968. **********************************************
  2969. **********************************************
  2970. **********************************************
  2971. **********************************************
  2972. **********************************************
  2973.  
  2974. TOPLINE: dc.w 0
  2975. BOTLINE: dc.w 0
  2976.  
  2977.  
  2978.  
  2979. **********************************************
  2980. **********************************************
  2981. **********************************************
  2982. **********************************************
  2983. **********************************************
  2984. **********************************************
  2985. **********************************************
  2986. **********************************************
  2987. **********************************************
  2988. **********************************************
  2989. **********************************************
  2990. **********************************************
  2991. **********************************************
  2992. **********************************************
  2993. **********************************************
  2994. **********************************************
  2995. **********************************************
  2996. **********************************************
  2997. **********************************************
  2998.     
  2999.  
  3000.     
  3001.  dc.w 0
  3002. YDIFF: dc.w 0
  3003.  
  3004. SPINAROUND: dc.w 0    
  3005. XCOS: dc.w 0
  3006. YCOS: dc.w 0
  3007. XSIN: dc.w 0
  3008. YSIN: dc.w 0
  3009. XCOS3: dc.w 0
  3010. YCOS3: dc.w 0
  3011. XSIN3: dc.w 0
  3012. YSIN3: dc.w 0
  3013. XCOS2: dc.w 0
  3014. YCOS2: dc.w 0
  3015. XSIN2: dc.w 0
  3016. YSIN2: dc.w 0
  3017. XADD: dc.l 0
  3018. YADD: dc.l 0
  3019. ZADD: dc.l 0
  3020. XOFF: dc.w 0
  3021. YOFF: dc.w 0
  3022. OLDXM: dc.w 0
  3023. OLDYM: dc.w 0
  3024.  
  3025.  
  3026.  
  3027. TEXTUREADD: dc.w 0
  3028.  
  3029.  
  3030. **********************************************************
  3031.  
  3032. UVCOORDS: ds.l 250
  3033. ROTATEDPTS: ds.l 250*4
  3034. SHADOWPTS: ds.l 250*4
  3035. ONSCREENPTS: ds.l 250
  3036.  
  3037. ZOFF: dc.w 768
  3038.  
  3039. LEFTRIGHT: ds.l 256
  3040.  
  3041. POLYGONDATA:
  3042.  incbin "ab3:vectobj/testcube"
  3043.  
  3044. ****************************
  3045.  
  3046.  
  3047. SINETABLE:
  3048.  incbin "ab3:includes/bigsine"
  3049.  
  3050.  
  3051. YANG: dc.w 0
  3052. XANG: dc.w 0
  3053.  
  3054.  
  3055. xmouse: dc.w 0
  3056. ymouse: dc.w 0
  3057.  
  3058. spleen: dc.w 0
  3059. lastspleen: dc.w 0
  3060.  
  3061. COPIEDPAL:
  3062.  dc.w 256,0
  3063.  ds.l 3*256
  3064.  ds.l 10
  3065.  
  3066. SHADOWBUFFER: ds.l 65536/4
  3067.  
  3068. PALETTEBIT:
  3069. ; incbin "256palette"
  3070. ; dc.w $ffff,$fffe
  3071.  
  3072.  incbin "ab3:includes/256pal"
  3073.  
  3074.  include "ab3:source_4000/chunky.s"
  3075.  
  3076. willy: ds.w 48
  3077.  
  3078.  
  3079. PALS:
  3080.  ds.l 2*49
  3081.  
  3082. pregour: dc.b 0
  3083. Gouraud: dc.b 0
  3084.  
  3085. PointAngPtr: dc.l 0
  3086. FRAMENUM: dc.w 0
  3087. PolyAngPtr: dc.l 0
  3088. PtsPtr: dc.l 0
  3089. LinesPtr: dc.l 0
  3090. POINTER_TO_POINTERS: dc.l 0
  3091. FRAME: dc.w 4
  3092. FLIBBLE: dc.w 0
  3093. START_OF_OBJECT: dc.l 0
  3094. num_points: dc.w 0
  3095. num_frames: dc.w 0
  3096. SORTIT: dc.w 0
  3097. PartBuffer: ds.l 2*32
  3098. endparttab:
  3099.  
  3100. x1: dc.w 0
  3101. y1: dc.w 0
  3102. z1: dc.w 0
  3103. x2: dc.w 0
  3104. y2: dc.w 0
  3105. z2: dc.w 0
  3106. x2b: dc.w 0
  3107. y2b: dc.w 0
  3108. z2b: dc.w 0
  3109.  
  3110. x3: dc.w 0
  3111. y3: dc.w 0
  3112. z3: dc.w 0
  3113.  
  3114. l1: dc.w 0
  3115. l2: dc.w 0
  3116.  
  3117. OBJONOFF: dc.l 0
  3118.  
  3119. SAVEHIGHS: ds.w 30
  3120.  
  3121. FASTBUFFER:
  3122.  dc.l fasty
  3123.  
  3124. fasty: ds.b 320*256
  3125.  
  3126. NORMBRIGHTS: ds.w 250
  3127.  
  3128. SPECBRIGHTS:
  3129.  dcb.l 100,31
  3130.  
  3131. ENDNORM:
  3132.  
  3133. LEFTUVS: ds.w 8*256
  3134. RIGHTUVS: ds.w 8*256
  3135.  
  3136. NORMVECTS: ds.w 3*250
  3137.  
  3138. ;WORLD: incbin "ab3:includes/world"
  3139.  
  3140. ;TWEEN: incbin "ab3:includes/tweenbrightfile"
  3141.  
  3142. TEXTURES: incbin "ab3:includes/newtexturemaps"
  3143.  
  3144. NEBBIE: incbin "work:temp/nebbieroar"
  3145.     ds.l (192/4)*16
  3146.  
  3147.  SECTION BGDROP,code_c
  3148.  
  3149. RAWSCRN:
  3150.  ds.l 2560*8
  3151.